In deze tutorial zullen we aan de hand van voorbeelden leren om openbare, beschermde en privé-overerving te gebruiken in C ++.
Bij overerving van C ++ kunnen we een kindklasse afleiden uit de basisklasse in verschillende toegangsmodi. Bijvoorbeeld,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Let op het sleutelwoord publicin de code
class Derived : public Base
Dit betekent dat we een afgeleide klasse hebben gemaakt van de basisklasse in de openbare modus . Als alternatief kunnen we ook klassen afleiden in beschermde of privé- modi.
Deze 3 trefwoorden ( public, protecteden private) worden genoemd toegangsspecificaties in C ++ overerving.
openbare, beschermde en privé-erfenis in C ++
openbare , beschermde en privé- overerving hebben de volgende kenmerken:
- openbare overerving zorgt ervoor dat
publicleden van de basisklassepublicin de afgeleide klasse blijven, en deprotectedleden van de basisklasse blijvenprotectedin de afgeleide klasse. - beschermde overerving maakt de
publicenprotectedleden van de basisklasseprotectedin de afgeleide klasse. - private overerving maakt de
publicenprotectedleden van de basisklasseprivatein de afgeleide klasse.
Opmerking: private leden van de basisklasse zijn niet toegankelijk voor de afgeleide klasse.
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 )
Voorbeeld 1: C ++ openbare erfenis
// 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; )
Uitvoer
Privé = 1 Beveiligd = 2 Openbaar = 3
Hier hebben we afgeleid PublicDeriveduit Basein de openbare modus .
Als resultaat in PublicDerived:
- prot wordt overgeërfd als beschermd .
- pub en
getPVT()worden als openbaar overgeërfd . - pvt is niet toegankelijk omdat het privé is in
Base.
Aangezien privé- en beschermde leden niet toegankelijk zijn, moeten we openbare functies creëren getPVT()en getProt()deze openen:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Toegankelijkheid bij openbare erfenis
| Toegankelijkheid | particuliere leden | beschermde leden | openbare leden |
|---|---|---|---|
| Basisklasse | Ja | Ja | Ja |
| Afgeleide klasse | Nee | Ja | Ja |
Voorbeeld 2: C ++ beschermde overerving
// 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; )
Uitvoer
Privé is niet toegankelijk. Beveiligd = 2 Openbaar = 3
Hier hebben we afgeleid ProtectedDeriveduit Basein beschermde modus .
Als resultaat in ProtectedDerived:
- prot, pub en
getPVT()worden overgeërfd als beschermd . pvtis niet toegankelijk omdat het privé is inBase.
Zoals we weten, zijn beschermde leden niet rechtstreeks toegankelijk.
Als gevolg hiervan kunnen we geen gebruik maken getPVT()van van ProtectedDerived. Dat is ook de reden waarom we de getPub()functie moeten maken ProtectedDerivedom toegang te krijgen tot de pub-variabele.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Toegankelijkheid in beschermde erfenis
| Toegankelijkheid | particuliere leden | beschermde leden | openbare leden |
|---|---|---|---|
| Basisklasse | Ja | Ja | Ja |
| Afgeleide klasse | Nee | Ja | Ja (overgenomen als beschermde variabelen) |
Voorbeeld 3: C ++ privé-overerving
// 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; )
Uitvoer
Privé is niet toegankelijk. Beveiligd = 2 Openbaar = 3
Hier hebben we afgeleid PrivateDeriveduit Basein de privémodus .
Als resultaat in PrivateDerived:
- prot,
pubengetPVT()worden overgeërfd als privé . - pvt is niet toegankelijk omdat het privé is in
Base.
Zoals we weten, zijn privé-leden niet rechtstreeks toegankelijk.
Als gevolg hiervan kunnen we geen gebruik maken getPVT()van van PrivateDerived. Dat is ook de reden waarom we de getPub()functie moeten maken PrivateDerivedom toegang te krijgen tot de pub-variabele.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Toegankelijkheid in privé-erfenis
| Toegankelijkheid | particuliere leden | beschermde leden | openbare leden |
|---|---|---|---|
| Basisklasse | Ja | Ja | Ja |
| Afgeleide klasse | Nee | Ja (overgenomen als privévariabelen) | Ja (overgenomen als privévariabelen) |








