Î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 public
din 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
public
membrii clasei de bază din clasapublic
derivată, iarprotected
membrii clasei de bază rămânprotected
în clasa derivată. - moștenirea protejată face din
public
șiprotected
membrii clasei de bază din clasaprotected
derivată. - moștenirea privată face din
public
șiprotected
membrii clasei de bază din clasaprivate
derivată.
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 PublicDerived
din 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 ProtectedDerived
din Base
în modul protejat .
Ca urmare, în ProtectedDerived
:
- prot, pub și
getPVT()
sunt moștenite ca protejate . pvt
este 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 ProtectedDerived
pentru 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 PrivateDerived
din 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 PrivateDerived
pentru 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) |