Î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 clasapublicderivată, iarprotectedmembrii clasei de bază rămânprotectedîn clasa derivată. - moștenirea protejată face din
publicșiprotectedmembrii clasei de bază din clasaprotectedderivată. - moștenirea privată face din
publicșiprotectedmembrii clasei de bază din clasaprivatederivată.
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 înBase.
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șigetPVT()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) |







