I denne opplæringen lærer vi å bruke offentlig, beskyttet og privat arv i C ++ ved hjelp av eksempler.
I C ++ arv kan vi utlede en barneklasse fra baseklassen i forskjellige tilgangsmodi. For eksempel,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Legg merke til nøkkelordet public
i koden
class Derived : public Base
Dette betyr at vi har opprettet en avledet klasse fra baseklassen i offentlig modus . Alternativt kan vi også utlede klasser i beskyttet eller privat modus.
Disse 3 søkeord ( public
, protected
og private
) er kjent som tilgang til byggebransjen i C ++ arv.
offentlig, beskyttet og privat arv i C ++
offentlig , beskyttet og privat arv har følgende funksjoner:
- offentlig arv gjør
public
medlemmer av basisklassenpublic
i den avledede klassen, ogprotected
medlemmene av baseklassen forblirprotected
i den avledede klassen. - beskyttet arv gjør
public
ogprotected
medlemmer av basisklassenprotected
i den avledede klassen. - privat arv gjør
public
ogprotected
medlemmer av basisklassenprivate
i den avledede klassen.
Merk: private
medlemmer av basisklassen er utilgjengelige for den avledede klassen.
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 )
Eksempel 1: C ++ offentlig arv
// 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; )
Produksjon
Privat = 1 Beskyttet = 2 Offentlig = 3
Her har vi avledet PublicDerived
fra Base
i offentlig modus .
Som et resultat, i PublicDerived
:
- prot er arvet som beskyttet .
- pub og
getPVT()
arves som offentlig . - pvt er utilgjengelig siden den er privat i
Base
.
Siden private og beskyttede medlemmer ikke er tilgjengelige, må vi opprette offentlige funksjoner getPVT()
og getProt()
få tilgang til dem:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Tilgjengelighet i offentlig arv
tilgjengelighet | private medlemmer | beskyttede medlemmer | offentlige medlemmer |
---|---|---|---|
Grunnklasse | Ja | Ja | Ja |
Avledet klasse | Nei | Ja | Ja |
Eksempel 2: C ++ beskyttet arv
// 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; )
Produksjon
Privat er ikke tilgjengelig. Beskyttet = 2 Offentlig = 3
Her har vi avledet ProtectedDerived
fra Base
i beskyttet modus .
Som et resultat, i ProtectedDerived
:
- prot, pub og
getPVT()
arves som beskyttet . pvt
er utilgjengelig siden den er privat iBase
.
Som vi vet, er det ikke tilgang til beskyttede medlemmer direkte.
Som et resultat kan vi ikke bruke getPVT()
fra ProtectedDerived
. Det er også derfor vi trenger å opprette getPub()
funksjonen ProtectedDerived
for å få tilgang til pubvariabelen.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Tilgjengelighet i beskyttet arv
tilgjengelighet | private medlemmer | beskyttede medlemmer | offentlige medlemmer |
---|---|---|---|
Grunnklasse | Ja | Ja | Ja |
Avledet klasse | Nei | Ja | Ja (arvet som beskyttede variabler) |
Eksempel 3: C ++ privat arv
// 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; )
Produksjon
Privat er ikke tilgjengelig. Beskyttet = 2 Offentlig = 3
Her har vi avledet PrivateDerived
fra Base
i privat modus .
Som et resultat, i PrivateDerived
:
- prot,
pub
oggetPVT()
arves som private . - pvt er utilgjengelig siden den er privat i
Base
.
Som vi vet, kan ikke private medlemmer nås direkte.
Som et resultat kan vi ikke bruke getPVT()
fra PrivateDerived
. Det er også derfor vi trenger å opprette getPub()
funksjonen PrivateDerived
for å få tilgang til pubvariabelen.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Tilgjengelighet i privat arv
tilgjengelighet | private medlemmer | beskyttede medlemmer | offentlige medlemmer |
---|---|---|---|
Grunnklasse | Ja | Ja | Ja |
Avledet klasse | Nei | Ja (arvet som private variabler) | Ja (arvet som private variabler) |