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 publici 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, protectedog 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
publicmedlemmer av basisklassenpublici den avledede klassen, ogprotectedmedlemmene av baseklassen forblirprotectedi den avledede klassen. - beskyttet arv gjør
publicogprotectedmedlemmer av basisklassenprotectedi den avledede klassen. - privat arv gjør
publicogprotectedmedlemmer av basisklassenprivatei 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 PublicDerivedfra Basei 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 ProtectedDerivedfra Basei beskyttet modus .
Som et resultat, i ProtectedDerived:
- prot, pub og
getPVT()arves som beskyttet . pvter 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 ProtectedDerivedfor å 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 PrivateDerivedfra Basei privat modus .
Som et resultat, i PrivateDerived:
- prot,
puboggetPVT()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 PrivateDerivedfor å 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) |








