Saturday, September 11, 2010

Các mức truy cập

Mức độ cho phép truy cập đến các dữ liệu thành viên từ một lớp được cho trong bảng sau
Phạm vi public protected private
Thành viên của cùng một lớp được phép được phép được phép
Thành viên của lớp dẫn xuất được phép được phép không được phép
Còn lại được phép không được phép không được phép
Bạn cũng cần lưu ý rằng trong cách viết về tính kế thừa Cat:public Animal có một số quy tắc chuyển đổi. Nếu các thành viên của lớp cơ sở có mức truy cập là A, khi thừa kế ta quy định mức truy cập của lớp con đối với lớp cơ sở là B (A và B có thể là private < protected < public)  và giả sử rằng A
Như tôi đã giới thiệu ở trên, một biến thành viên được chỉ định từ khóa chỉ mức truy cập là private thì chỉ có các phương thức trong cùng một lớp hoặc các phương thức bạn mới có quyền truy cập (bao gồm hàm bạn và lớp bạn). Nếu mức truy cập là public, thì mọi phương thức đều có quyền truy cập đến. Tôi xin giải thích kĩ hơn cho bạn đối với từ khóa protected. Tôi cũng đã trình bày về các khả năng mà một phương thức có thể truy cập đến một biến thành viên được khai báo là protected:

- Tương tự như các mức truy cập của private.
- Từ các phương thức của một lớp dẫn xuất.
- Từ các phương thức bạn của lớp dẫn xuất (bao gồm hàm bạn và lớp bạn).
Đối với trường hợp đầu tiên, chung ta không thảo luận thêm. Chúng ta sẽ quan tâm đến hai khả năng sau cùng. Đối với khả năng thứ hai, bạn có thể quan sát ví dụ sau đây:
Ví dụ Kết quả
#include using namespace std;
class Polygon{
protected:
int w, h;
public:
void SetValue(int w, int h){
this->w = w;
this->h = h;
}
};
class Rectangle:public Polygon{
public:
int GetArea(){
return w*h;
}
};
int main()
{
Rectangle rec;
rec.SetValue(4, 5);
cout<
return 0;
}
20
Giải thích: bạn lưu ý trong phương thức GetArea của đối tượng Rectangle. Nó sử dụng các biến thành viên được thừa kế từ lớp Polygon. Những biến thành viên này được khai báo là protected, do đó, nó có quyền truy cập đến.
Trong trường hợp, bạn của một lớp dẫn xuất, bạn có thể quan sát ví dụ minh họa sau đây:
Ví dụ Kết quả
#include using namespace std;
class Polygon{
protected:
int w, h;
public:
void SetValue(int w, int h){
this->w = w;
this->h = h;
}
};
class Rectangle:public Polygon{
public:
int GetArea(){
return w*h;
}
friend void ShowWH(Rectangle);
};
void ShowWH(Rectangle p){
cout<<<”x”<}
int main()
{
Rectangle rec;
rec.SetValue(4, 5);
ShowWH(rec);
return 0;
}
4×5
Giải thích: như bạn thấy, trong trường hợp này, phương thức ShowWH là bạn của lớp dẫn xuất Rectangle, nó có quyền truy cập đến các biến thành viên được chỉ định protected.

No comments:

Post a Comment

Popular Posts