Trong hướng dẫn này, chúng ta sẽ học cách sử dụng kế thừa công khai, được bảo vệ và riêng tư trong C ++ với sự trợ giúp của các ví dụ.
Trong kế thừa C ++, chúng ta có thể dẫn xuất một lớp con từ lớp cơ sở trong các chế độ truy cập khác nhau. Ví dụ,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Chú ý từ khóa publictrong mã
class Derived : public Base
Điều này có nghĩa là chúng ta đã tạo một lớp dẫn xuất từ lớp cơ sở ở chế độ công khai . Ngoài ra, chúng ta cũng có thể lấy các lớp trong các chế độ được bảo vệ hoặc riêng tư .
3 từ khóa ( public, protectedvà private) này được gọi là chỉ định truy cập trong kế thừa C ++.
kế thừa công khai, bảo vệ và riêng tư trong C ++
thừa kế công khai , được bảo vệ và riêng tư có các tính năng sau:
- kế thừa công khai làm cho
publiccác thành viên của lớp cơ sởpublictrong lớp dẫn xuất và cácprotectedthành viên của lớp cơ sở vẫnprotectedở trong lớp dẫn xuất. - kế thừa được bảo vệ làm cho
publicvàprotectedcác thành viên của lớp cơ sởprotectedtrong lớp dẫn xuất. - kế thừa riêng làm cho
publicvàprotectedcác thành viên của lớp cơ sởprivatetrong lớp dẫn xuất.
Lưu ý: private các thành viên của lớp cơ sở không thể truy cập được vào lớp dẫn xuất.
class Base ( public: int x; protected: int y; private: int z; ); class PublicDerived: public Base ( // x is public // y is protected // z is not accessible from PublicDerived ); class ProtectedDerived: protected Base ( // x is protected // y is protected // z is not accessible from ProtectedDerived ); class PrivateDerived: private Base ( // x is private // y is private // z is not accessible from PrivateDerived )
Ví dụ 1: Kế thừa công khai C ++
// C++ program to demonstrate the working of public inheritance #include using namespace std; class Base ( private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // function to access private member int getPVT() ( return pvt; ) ); class PublicDerived : public Base ( public: // function to access protected member from Base int getProt() ( return prot; ) ); int main() ( PublicDerived object1; cout << "Private = " << object1.getPVT() << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.pub << endl; return 0; )
Đầu ra
Riêng tư = 1 Được bảo vệ = 2 Công khai = 3
Ở đây, chúng tôi đã bắt nguồn PublicDerivedtừ Baseở chế độ công khai .
Kết quả là PublicDerived:
- prot được kế thừa như được bảo vệ .
- quán rượu và
getPVT()được thừa kế dưới dạng công cộng . - pvt không thể truy cập được vì nó ở chế độ riêng tư
Base.
Vì các thành viên riêng tư và được bảo vệ không thể truy cập được, chúng tôi cần tạo các chức năng công khai getPVT()và getProt()để truy cập chúng:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Khả năng tiếp cận trong Thừa kế Công cộng
| Khả năng tiếp cận | thành viên riêng | thành viên được bảo vệ | thành viên công cộng |
|---|---|---|---|
| Lớp cơ sở | Đúng | Đúng | Đúng |
| Lớp có nguồn gốc | Không | Đúng | Đúng |
Ví dụ 2: Kế thừa được bảo vệ C ++
// C++ program to demonstrate the working of protected inheritance #include using namespace std; class Base ( private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // function to access private member int getPVT() ( return pvt; ) ); class ProtectedDerived : protected Base ( public: // function to access protected member from Base int getProt() ( return prot; ) // function to access public member from Base int getPub() ( return pub; ) ); int main() ( ProtectedDerived object1; cout << "Private cannot be accessed." << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.getPub() << endl; return 0; )
Đầu ra
Riêng tư không thể được truy cập. Được bảo vệ = 2 Công khai = 3
Ở đây, chúng tôi đã bắt nguồn ProtectedDerivedtừ Basetrong chế độ được bảo vệ .
Kết quả là ProtectedDerived:
- prot, pub và
getPVT()được kế thừa như được bảo vệ . pvtkhông thể truy cập được vì nó là riêng tư trongBase.
Như chúng ta biết, các thành viên được bảo vệ không thể được truy cập trực tiếp.
Do đó, chúng tôi không thể sử dụng getPVT()from ProtectedDerived. Đó cũng là lý do tại sao chúng ta cần tạo getPub()hàm ProtectedDerivedđể truy cập biến pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Khả năng tiếp cận trong Kế thừa được Bảo vệ
| Khả năng tiếp cận | thành viên riêng | thành viên được bảo vệ | thành viên công cộng |
|---|---|---|---|
| Lớp cơ sở | Đúng | Đúng | Đúng |
| Lớp có nguồn gốc | Không | Đúng | Có (kế thừa dưới dạng các biến được bảo vệ) |
Ví dụ 3: Kế thừa riêng trong C ++
// C++ program to demonstrate the working of private inheritance #include using namespace std; class Base ( private: int pvt = 1; protected: int prot = 2; public: int pub = 3; // function to access private member int getPVT() ( return pvt; ) ); class PrivateDerived : private Base ( public: // function to access protected member from Base int getProt() ( return prot; ) // function to access private member int getPub() ( return pub; ) ); int main() ( PrivateDerived object1; cout << "Private cannot be accessed." << endl; cout << "Protected = " << object1.getProt() << endl; cout << "Public = " << object1.getPub() << endl; return 0; )
Đầu ra
Riêng tư không thể được truy cập. Được bảo vệ = 2 Công khai = 3
Ở đây, chúng tôi đã bắt nguồn PrivateDerivedtừ Baseở chế độ riêng tư .
Kết quả là PrivateDerived:
- prot
pubvàgetPVT()được kế thừa dưới dạng riêng tư . - pvt không thể truy cập được vì nó ở chế độ riêng tư
Base.
Như chúng ta biết, không thể truy cập trực tiếp các thành viên riêng tư.
Do đó, chúng tôi không thể sử dụng getPVT()from PrivateDerived. Đó cũng là lý do tại sao chúng ta cần tạo getPub()hàm PrivateDerivedđể truy cập biến pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Khả năng tiếp cận trong Thừa kế riêng
| Khả năng tiếp cận | thành viên riêng | thành viên được bảo vệ | thành viên công cộng |
|---|---|---|---|
| Lớp cơ sở | Đúng | Đúng | Đúng |
| Lớp có nguồn gốc | Không | Có (được kế thừa dưới dạng biến riêng) | Có (được kế thừa dưới dạng biến riêng) |








