Phạm vi truy nhập đến các thành phần của lớp cơ sở

3 417 0
Phạm vi truy nhập đến các thành phần        của lớp cơ sở

Đang tải... (xem toàn văn)

Thông tin tài liệu

Phạm vi truy nhập đến các thành phần của lớp sở 3.1. Các từ khoá quy định phạm vi truy nhập của lớp sở + Mặc dù lớp dẫn xuất được thừa kế tất cả các thành phần của lớp sở, nhưng trong lớp dẫn xuất không thể truy nhập tới tất cả các thành phần này. Giải pháp thường dùng là sử dụng các phương thức của lớp cở sở để truy nhập đến các thuộc tính của chính lớp sở đó. Cũng thể sử dụng các giải pháp khác dưới đây. + Các thành phần private của lớp cở sở không cho phép truy nhập trong lớp dẫn xuất. + Các thành phần public của lớp sở thể truy nhập bất kỳ chỗ nào trong chương trình. Như vậy trong các lớp dẫn xuất thể truy nhập được tới các thành phần này. + Các thành phần khai báo là protected phạm vi truy nhập rộng hơn so với các thành phần private, nhưng hẹp hơn so với các thành phần public. Các thành phần protected của một lớp chỉ được mở rộng phạm vi truy nhập cho các lớp dẫn xuất trực tiếp từ lớp này. 3.2. Hai kiểu dẫn xuất 2 kiểu dẫn xuất là private và public, chúng cho các phạm vi truy nhập khác nhau tới lớp sở. Cụ thể như sau: + Các thành phần public và protected của lớp sở sẽ trở thành các thành phần public và protected của lớp dẫn xuất theo kiểu public. + Các thành phần public và protected của lớp sở sẽ trở thành các thành phần private của lớp dẫn xuất theo kiểu private. dụ : Giả sử lớp A có: thuộc tính public a1 thuộc tính protected a2 và lớp B dẫn xuất public từ A, thì A::a1 trở thành public trong B, A::a2 trở thành protected trong B. Do đó nếu dùng B làm lớp cở để xây dựng lớp C. Thì trong C thể truy nhập tới A::a1 và A::a2. Thế nhưng nếu sửa đổi để B dẫn xuất private từ A, thì cả A::a1 và A::a2 trơ thành private trong B, và khi đó trong C không được phép truy nhập tới các thuộc tính A::a1 và A::a2. Để biết tường tận hơn, chúng ta hãy biên dịch chương trình: //CT5-04 // Pham vi truy nhap #include <conio.h> #include <iostream.h> #include <string.h> class A { protected: int a1; public: 251 252 int a2; A() { a1=a2=0; } A(int t1, int t2) { a1=t1; a2= t2; } void in() { cout << a1 <<" " << a2 ; } } ; class B: private A { protected: int b1; public: int b2; B() { b1=b2=0; } B(int t1, int t2, int u1, int u2) { a1=t1; a2=t2; b1=u1;b2=u2; } void in() { cout << a1 <<" " << a2 << " " << b1 << " " << b2; } } ; class C : public B { public: C() { 253 254 b1=b2=0; } C(int t1, int t2, int u1,int u2) { a1=t1; a2=t2; b1=u1;b2=u2; } void in() { cout << a1; cout <<" " << a2 << " " << b1 << " " << b2; } }; void main() { C c(1,2,3,4); c.in(); getch(); } Chúng ta sẽ nhận được 4 thông báo lỗi sau trong lớp C (tại hàm tạo đối và phương thức in): A::a1 is not accessible A::a2 is not accessible A::a1 is not accessible A::a2 is not accessible Bây giờ nếu sửa đổi để lớp B dẫn xuất public từ A thì chương trình sẽ không lỗi và làm việc tốt. . Phạm vi truy nhập đến các thành phần của lớp cơ sở 3.1. Các từ khoá quy định phạm vi truy nhập của lớp cơ sở + Mặc dù lớp dẫn xuất được. chúng cho các phạm vi truy nhập khác nhau tới lớp cơ sở. Cụ thể như sau: + Các thành phần public và protected của lớp cơ sở sẽ trở thành các thành phần public

Ngày đăng: 26/10/2013, 00:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan