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 public
trong 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
, protected
và 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
public
các thành viên của lớp cơ sởpublic
trong lớp dẫn xuất và cácprotected
thà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
public
vàprotected
các thành viên của lớp cơ sởprotected
trong lớp dẫn xuất. - kế thừa riêng làm cho
public
vàprotected
các thành viên của lớp cơ sởprivate
trong 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 PublicDerived
từ 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 ProtectedDerived
từ Base
trong chế độ được bảo vệ .
Kết quả là ProtectedDerived
:
- prot, pub và
getPVT()
được kế thừa như được bảo vệ . pvt
khô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 PrivateDerived
từ Base
ở chế độ riêng tư .
Kết quả là PrivateDerived
:
- prot
pub
và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) |