Thừa kế công khai, được bảo vệ và riêng tư trong lập trình C ++

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, protectedprivate) 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ệ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ác protectedthành viên của lớp cơ sở vẫn protectedở trong lớp dẫn xuất.
  • kế thừa được bảo vệ làm cho publicprotectedcá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 publicprotectedcá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ừ Basechế độ 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 .

các thành viên riêng tưđượ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()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ư trong Base.

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ừ Basechế độ riêng tư .

Kết quả là PrivateDerived:

  • prot pubgetPVT()đượ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)

thú vị bài viết...