Dziedziczenie publiczne, chronione i prywatne w programowaniu w języku C ++

W tym samouczku nauczymy się korzystać z dziedziczenia publicznego, chronionego i prywatnego w C ++ na podstawie przykładów.

W dziedziczeniu C ++ możemy wyprowadzić klasę potomną z klasy bazowej w różnych trybach dostępu. Na przykład,

 class Base (… .… … . ); class Derived : public Base (… .… … . );

Zwróć uwagę na słowo kluczowe publicw kodzie

 class Derived : public Base

Oznacza to, że utworzyliśmy klasę pochodną z klasy bazowej w trybie publicznym . Alternatywnie możemy również wyprowadzać klasy w trybie chronionym lub prywatnym .

Te 3 słowa kluczowe ( public, protectedi private) są znane jako specyfikatory dostępu w dziedziczeniu w języku C ++.

dziedziczenie publiczne, chronione i prywatne w C ++

dziedziczenie publiczne , chronione i prywatne ma następujące cechy:

  • dziedziczenie publiczne powoduje, że publicelementy członkowskie klasy bazowej w klasie publicpochodnej, a elementy protectedczłonkowskie klasy bazowej pozostają protectedw klasie pochodnej.
  • chronione dziedziczenie powoduje, że publici protectedelementy członkowskie klasy bazowej w klasie protectedpochodnej.
  • dziedziczenie prywatne powoduje, że publici protectedczłonkowie klasy bazowej w klasie privatepochodnej.

Uwaga: private elementy składowe klasy bazowej są niedostępne dla klasy pochodnej.

 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 )

Przykład 1: Dziedziczenie publiczne w 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; )

Wynik

 Prywatna = 1 Chroniona = 2 Publiczna = 3

Tutaj wyprowadziliśmy PublicDerivedz Basew trybie publicznym .

W rezultacie w PublicDerived:

  • prot jest dziedziczony jako chroniony .
  • pub i getPVT()są dziedziczone jako publiczne .
  • pvt jest niedostępny, ponieważ jest prywatny w Base.

Ponieważ członkowie prywatni i chronieni nie są dostępni, musimy utworzyć funkcje publiczne getPVT()i getProt()uzyskać do nich dostęp:

 // Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;

Dostępność w dziedziczeniu publicznym

Dostępność członkowie prywatni chronionych członków członkowie publiczni
Klasa podstawowa tak tak tak
Klasy pochodnej Nie tak tak

Przykład 2: Dziedziczenie chronione w języku 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; )

Wynik

Prywatne nie są dostępne. Chroniony = 2 Publiczny = 3

Tutaj wyprowadziliśmy ProtectedDerivedz Basew trybie chronionym .

W rezultacie w ProtectedDerived:

  • prot, pub i getPVT()są dziedziczone jako chronione .
  • pvtjest niedostępny, ponieważ jest prywatny w Base.

Jak wiemy, chronionych członków nie można uzyskać bezpośrednio.

W rezultacie nie możemy używać getPVT()from ProtectedDerived. Dlatego też musimy utworzyć getPub()funkcję ProtectedDerived, aby uzyskać dostęp do zmiennej pub.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Dostępność w dziedziczeniu chronionym

Dostępność członkowie prywatni chronionych członków członkowie publiczni
Klasa podstawowa tak tak tak
Klasy pochodnej Nie tak Tak (dziedziczone jako chronione zmienne)

Przykład 3: Dziedziczenie prywatne w 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; )

Wynik

Prywatne nie są dostępne. Chroniony = 2 Publiczny = 3

Tutaj mamy pochodzi PrivateDerivedod Basew trybie prywatnym .

W rezultacie w PrivateDerived:

  • prot pubi getPVT()są dziedziczone jako prywatne .
  • pvt jest niedostępny, ponieważ jest prywatny w Base.

Jak wiemy, bezpośredni dostęp do członków prywatnych nie jest możliwy.

W rezultacie nie możemy używać getPVT()from PrivateDerived. Dlatego też musimy utworzyć getPub()funkcję PrivateDerived, aby uzyskać dostęp do zmiennej pub.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Dostępność w dziedziczeniu prywatnym

Dostępność członkowie prywatni chronionych członków członkowie publiczni
Klasa podstawowa tak tak tak
Klasy pochodnej Nie Tak (dziedziczone jako zmienne prywatne) Tak (dziedziczone jako zmienne prywatne)

Interesujące artykuły...