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 public
in 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
, protected
en 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
public
leden van de basisklassepublic
in de afgeleide klasse blijven, en deprotected
leden van de basisklasse blijvenprotected
in de afgeleide klasse. - beschermde overerving maakt de
public
enprotected
leden van de basisklasseprotected
in de afgeleide klasse. - private overerving maakt de
public
enprotected
leden van de basisklasseprivate
in 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 PublicDerived
uit Base
in 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 ProtectedDerived
uit Base
in beschermde modus .
Als resultaat in ProtectedDerived
:
- prot, pub en
getPVT()
worden overgeërfd als beschermd . pvt
is 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 ProtectedDerived
om 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 PrivateDerived
uit Base
in de privémodus .
Als resultaat in PrivateDerived
:
- prot,
pub
engetPVT()
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 PrivateDerived
om 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) |