I den här handledningen lär vi oss att använda offentlig, skyddad och privat arv i C ++ med hjälp av exempel.
I C ++ arv kan vi härleda en barnklass från basklassen i olika åtkomstlägen. Till exempel,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Lägg märke till nyckelordet public
i koden
class Derived : public Base
Det betyder att vi har skapat en härledd klass från basklassen i offentligt läge . Alternativt kan vi också härleda klasser i skyddade eller privata lägen.
Dessa 3 nyckelord ( public
, protected
, och private
) är kända som åtkomstspecifikations i C ++ arv.
offentligt, skyddat och privat arv i C ++
offentligt , skyddat och privat arv har följande funktioner:
- offentligt arv gör
public
medlemmar av basklassenpublic
i den härledda klassen, ochprotected
medlemmarna i basklassen förblirprotected
i den härledda klassen. - skyddad arv gör
public
och tillprotected
medlemmar i basklassenprotected
i den härledda klassen. - privat arv gör
public
ochprotected
medlemmar av basklassenprivate
i den härledda klassen.
Obs! private
Medlemmar i basklassen är inte tillgängliga för den härledda 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 )
Exempel 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 Skyddad = 2 Offentlig = 3
Här har vi härstammar PublicDerived
från Base
i offentliga läge .
Som ett resultat, i PublicDerived
:
- prot ärvs som skyddat .
- pub och
getPVT()
ärvs som offentlig . - pvt är oåtkomligt eftersom det är privat i
Base
.
Eftersom privata och skyddade medlemmar inte är tillgängliga måste vi skapa offentliga funktioner getPVT()
och getProt()
få åtkomst till dem:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Tillgänglighet i allmän arv
Tillgänglighet | privata medlemmar | skyddade medlemmar | offentliga medlemmar |
---|---|---|---|
Basklass | Ja | Ja | Ja |
Härledd klass | Nej | Ja | Ja |
Exempel 2: C ++ skyddad 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 inte nås. Skyddad = 2 Offentlig = 3
Här har vi härrör ProtectedDerived
från Base
i skyddat läge .
Som ett resultat, i ProtectedDerived
:
- prot, pub och
getPVT()
ärvs som skyddad . pvt
är otillgänglig eftersom det är privat iBase
.
Som vi vet kan skyddade medlemmar inte nås direkt.
Som ett resultat kan vi inte använda getPVT()
från ProtectedDerived
. Det är också därför vi behöver skapa getPub()
funktionen ProtectedDerived
för att komma åt pubvariabeln.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Tillgänglighet i skyddad arv
Tillgänglighet | privata medlemmar | skyddade medlemmar | offentliga medlemmar |
---|---|---|---|
Basklass | Ja | Ja | Ja |
Härledd klass | Nej | Ja | Ja (ärvt som skyddade variabler) |
Exempel 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 inte nås. Skyddad = 2 Offentlig = 3
Här har vi härledt PrivateDerived
från Base
i privat läge .
Som ett resultat, i PrivateDerived
:
- prot
pub
ochgetPVT()
ärvs som privata . - pvt är oåtkomligt eftersom det är privat i
Base
.
Som vi vet kan privata medlemmar inte nås direkt.
Som ett resultat kan vi inte använda getPVT()
från PrivateDerived
. Det är också därför vi behöver skapa getPub()
funktionen PrivateDerived
för att komma åt pubvariabeln.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Tillgänglighet i privat arv
Tillgänglighet | privata medlemmar | skyddade medlemmar | offentliga medlemmar |
---|---|---|---|
Basklass | Ja | Ja | Ja |
Härledd klass | Nej | Ja (ärvda som privata variabler) | Ja (ärvda som privata variabler) |