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 klasiepublicpochodnej, a elementyprotectedczłonkowskie klasy bazowej pozostająprotectedw klasie pochodnej. - chronione dziedziczenie powoduje, że
publiciprotectedelementy członkowskie klasy bazowej w klasieprotectedpochodnej. - dziedziczenie prywatne powoduje, że
publiciprotectedczłonkowie klasy bazowej w klasieprivatepochodnej.
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 wBase.
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
pubigetPVT()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) |








