Offentlig, beskyttet og privat arv i C ++ programmering

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 publici 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 publicmedlemmer af basisklassen publici den afledte klasse, og protectedmedlemmerne af baseklassen forbliver protectedi den afledte klasse.
  • beskyttet arv gør publicog til protectedmedlemmer af basisklassen protectedi den afledte klasse.
  • privat arv gør publicog protectedmedlemmer af basisklassen privatei 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 PublicDerivedaf Basei 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 ProtectedDerivedaf Basei beskyttet tilstand .

Som et resultat i ProtectedDerived:

  • prot, pub og getPVT()arves som beskyttet .
  • pvter utilgængelig, da det er privat i Base.

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 ProtectedDerivedfor 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 PrivateDerivedaf Basei privat tilstand .

Som et resultat i PrivateDerived:

  • prot pubog getPVT()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 PrivateDerivedfor 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)

Interessante artikler...