Offentlig, skyddad och privat arv i C ++ programmering

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 publici 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 publicmedlemmar av basklassen publici den härledda klassen, och protectedmedlemmarna i basklassen förblir protectedi den härledda klassen.
  • skyddad arv gör publicoch till protectedmedlemmar i basklassen protectedi den härledda klassen.
  • privat arv gör publicoch protectedmedlemmar av basklassen privatei 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 PublicDerivedfrån Basei 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 ProtectedDerivedfrån Basei skyddat läge .

Som ett resultat, i ProtectedDerived:

  • prot, pub och getPVT()ärvs som skyddad .
  • pvtär otillgänglig eftersom det är privat i Base.

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 ProtectedDerivedfö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 PrivateDerivedfrån Basei privat läge .

Som ett resultat, i PrivateDerived:

  • prot puboch getPVT()ä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 PrivateDerivedfö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)

Intressanta artiklar...