I denne vejledning lærer vi at bruge offentlig, beskyttet og privat arv i C ++ ved hjælp af eksempler.
I C ++ arv kan vi udlede en underordnet klasse fra baseklassen i forskellige adgangstilstande. For eksempel,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Bemærk nøgleordet public
i koden
class Derived : public Base
Dette betyder, at vi har oprettet en afledt klasse fra baseklassen i offentlig tilstand . Alternativt kan vi også aflede klasser i beskyttede eller private tilstande.
Disse 3 nøgleord ( public
, protected
, og private
) er kendte som adgang beregnere i C ++ arv.
offentlig, beskyttet og privat arv i C ++
offentlig , beskyttet og privat arv har følgende funktioner:
- offentlig arv gør
public
medlemmer af basisklassenpublic
i den afledte klasse, ogprotected
medlemmerne af baseklassen forbliverprotected
i den afledte klasse. - beskyttet arv gør
public
og tilprotected
medlemmer af basisklassenprotected
i den afledte klasse. - privat arv gør
public
ogprotected
medlemmer af basisklassenprivate
i den afledte klasse.
Bemærk: private
medlemmer af basisklassen er utilgængelige for den afledte 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 )
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; )
Produktion
Privat = 1 Beskyttet = 2 Offentlig = 3
Her er vi afledt PublicDerived
af Base
i offentlig tilstand .
Som et resultat i PublicDerived
:
- prot arves som beskyttet .
- pub og
getPVT()
arves som offentlig . - pvt er utilgængelig, da det er privat i
Base
.
Da private og beskyttede medlemmer ikke er tilgængelige, er vi nødt til at oprette offentlige funktioner getPVT()
og getProt()
få adgang til dem:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Tilgængelighed i offentlig arv
Tilgængelighed | private medlemmer | beskyttede medlemmer | offentlige medlemmer |
---|---|---|---|
Basis klasse | Ja | Ja | Ja |
Afledt klasse | Ingen | 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; )
Produktion
Privat kan ikke tilgås. Beskyttet = 2 Offentlig = 3
Her er vi afledt ProtectedDerived
af Base
i beskyttet tilstand .
Som et resultat i ProtectedDerived
:
- prot, pub og
getPVT()
arves som beskyttet . pvt
er utilgængelig, da det er privat iBase
.
Som vi ved, er der ikke adgang til beskyttede medlemmer direkte.
Som et resultat kan vi ikke bruge getPVT()
fra ProtectedDerived
. Derfor er vi nødt til at oprette getPub()
funktionen ProtectedDerived
for at få adgang til pubvariablen.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Tilgængelighed i beskyttet arv
Tilgængelighed | private medlemmer | beskyttede medlemmer | offentlige medlemmer |
---|---|---|---|
Basis klasse | Ja | Ja | Ja |
Afledt klasse | Ingen | Ja | Ja (nedarvet 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; )
Produktion
Privat kan ikke tilgås. Beskyttet = 2 Offentlig = 3
Her er vi afledt PrivateDerived
af Base
i privat tilstand .
Som et resultat i PrivateDerived
:
- prot
pub
oggetPVT()
arves som private . - pvt er utilgængelig, da det er privat i
Base
.
Som vi ved, kan private medlemmer ikke få adgang direkte.
Som et resultat kan vi ikke bruge getPVT()
fra PrivateDerived
. Derfor er vi nødt til at oprette getPub()
funktionen PrivateDerived
for at få adgang til pubvariablen.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Tilgængelighed i privat arv
Tilgængelighed | private medlemmer | beskyttede medlemmer | offentlige medlemmer |
---|---|---|---|
Basis klasse | Ja | Ja | Ja |
Afledt klasse | Ingen | Ja (arvet som private variabler) | Ja (arvet som private variabler) |