Moștenirea publică, protejată și privată în programarea C ++

În acest tutorial, vom învăța să folosim moștenirea publică, protejată și privată în C ++ cu ajutorul exemplelor.

În moștenirea C ++, putem obține o clasă copil din clasa de bază în diferite moduri de acces. De exemplu,

 class Base (… .… … . ); class Derived : public Base (… .… … . );

Observați cuvântul cheie publicdin cod

 class Derived : public Base

Aceasta înseamnă că am creat o clasă derivată din clasa de bază în modul public . Alternativ, putem obține, de asemenea, clase în moduri protejate sau private .

Aceste 3 cuvinte cheie ( public,, protectedși private) sunt cunoscute ca specificatori de acces în moștenirea C ++.

moștenirea publică, protejată și privată în C ++

moștenirea publică , protejată și privată are următoarele caracteristici:

  • moștenirea publică îi face pe publicmembrii clasei de bază din clasa publicderivată, iar protectedmembrii clasei de bază rămân protectedîn clasa derivată.
  • moștenirea protejată face din publicși protectedmembrii clasei de bază din clasa protectedderivată.
  • moștenirea privată face din publicși protectedmembrii clasei de bază din clasa privatederivată.

Notă: private membrii clasei de bază sunt inaccesibili clasei derivate.

 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 )

Exemplul 1: moștenirea publică C ++

 // 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; )

Ieșire

 Privat = 1 Protejat = 2 Public = 3

Aici, ne - am derivat PublicDeriveddin Baseîn modul publice .

Ca urmare, în PublicDerived:

  • prot este moștenit ca protejat .
  • pub și getPVT()sunt moștenite ca publice .
  • pvt este inaccesibil, deoarece este privat în Base.

Deoarece membrii privați și protejați nu sunt accesibile, trebuie să creăm funcții publice getPVT()și getProt()să le accesăm:

 // Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;

Accesibilitatea în moștenirea publică

Accesibilitate membrii privați membrii protejați membri publici
Clasa de bază da da da
Clasa derivată Nu da da

Exemplul 2: Moștenirea protejată C ++

 // 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; )

Ieșire

Privat nu poate fi accesat. Protejat = 2 Public = 3

Aici, am derivat ProtectedDeriveddin Baseîn modul protejat .

Ca urmare, în ProtectedDerived:

  • prot, pub și getPVT()sunt moștenite ca protejate .
  • pvteste inaccesibil, deoarece este privat în Base.

După cum știm, membrii protejați nu pot fi accesați direct.

Ca urmare, nu putem folosi getPVT()din ProtectedDerived. De aceea, trebuie să creăm getPub()funcția ProtectedDerivedpentru a accesa variabila pub.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Accesibilitatea în moștenirea protejată

Accesibilitate membrii privați membrii protejați membri publici
Clasa de bază da da da
Clasa derivată Nu da Da (moștenit ca variabile protejate)

Exemplul 3: Moștenirea privată C ++

 // 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; )

Ieșire

Privat nu poate fi accesat. Protejat = 2 Public = 3

Aici, ne - am derivat PrivateDeriveddin Baseîn modul privat .

Ca urmare, în PrivateDerived:

  • prot pubși getPVT()sunt moștenite ca private .
  • pvt este inaccesibil, deoarece este privat în Base.

După cum știm, membrii privați nu pot fi accesați direct.

Ca urmare, nu putem folosi getPVT()din PrivateDerived. De aceea, trebuie să creăm getPub()funcția PrivateDerivedpentru a accesa variabila pub.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Accesibilitatea în moștenirea privată

Accesibilitate membrii privați membrii protejați membri publici
Clasa de bază da da da
Clasa derivată Nu Da (moștenit ca variabile private) Da (moștenit ca variabile private)

Articole interesante...