C++ có 3 mức truy cập (access specifier) kiểm soát khả năng nhìn thấy thành viên class từ bên ngoài và từ class con (derived).
Bảng tóm tắt
| Mức truy cập | Trong class | Class con (derived) | Bên ngoài (main, v.v.) |
|---|---|---|---|
public | ✓ | ✓ | ✓ |
protected | ✓ | ✓ | ✗ |
private | ✓ | ✗ | ✗ |
Kế thừa (Inheritance) ảnh hưởng như thế nào?
Khi class con kế thừa từ class cha, mức truy cập của thành viên cha trong con thay đổi tùy loại kế thừa:
| Loại kế thừa | public cha | protected cha | private cha |
|---|---|---|---|
public inheritance | public | protected | không truy cập được |
protected inheritance | protected | protected | không truy cập được |
private inheritance | private | private | không truy cập được |
- public inheritance: "IS-A" relationship (con là một cha). Giữ nguyên public/protected.
- protected inheritance: Hiếm dùng. Public/protected cha thành protected trong con.
- private inheritance: "IMPLEMENTED-IN-TERMS-OF" (con triển khai bằng cha). Tất cả thành viên cha thành private trong con.
Ví dụ minh họa
class Base {
public: int pub = 1;
protected: int pro = 2;
private: int pri = 3;
};
class DerivedPublic : public Base {
void f() { cout << pub << pro; /* pri lỗi */ }
};
class DerivedPrivate : private Base {
void f() { cout << pub << pro; /* pri lỗi */ }
// pub, pro giờ là private trong DerivedPrivate
};
Mặc định: class mặc định private cho thành viên và kế thừa. struct mặc định public.