Offentlig, beskyttet og privat arv i C ++ programmering

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 basisklassen publici den avledede klassen, og protectedmedlemmene av baseklassen forblir protectedi den avledede klassen.
  • beskyttet arv gjør publicog protectedmedlemmer av basisklassen protectedi den avledede klassen.
  • privat arv gjør publicog protectedmedlemmer av basisklassen privatei 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 i Base.

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, pubog getPVT()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)

Interessante artikler...