Dans ce tutoriel, nous allons apprendre à utiliser l'héritage public, protégé et privé en C ++ à l'aide d'exemples.
Dans l'héritage C ++, nous pouvons dériver une classe enfant de la classe de base dans différents modes d'accès. Par exemple,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Notez le mot-clé publicdans le code
class Derived : public Base
Cela signifie que nous avons créé une classe dérivée de la classe de base en mode public . Alternativement, nous pouvons également dériver des classes dans des modes protégés ou privés .
Ces 3 mots-clés ( public, protectedet private) sont appelés spécificateurs d'accès dans l'héritage C ++.
héritage public, protégé et privé en C ++
l' héritage public , protégé et privé présente les caractéristiques suivantes:
- l'héritage public fait que les
publicmembres de la classe de basepublicdans la classe dérivée et lesprotectedmembres de la classe de base restentprotecteddans la classe dérivée. - l'héritage protégé rend les membres
publicetprotectedde la classe de baseprotecteddans la classe dérivée. - l'héritage privé rend les membres
publicetprotectedde la classe de baseprivatedans la classe dérivée.
Remarque: les private membres de la classe de base sont inaccessibles à la classe dérivée.
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 )
Exemple 1: héritage 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; )
Production
Privé = 1 Protégé = 2 Public = 3
Ici, nous avons dérivé PublicDerivedde Baseen mode public .
En conséquence, dans PublicDerived:
- prot est hérité comme protégé .
- pub et
getPVT()sont hérités en tant que public . - pvt est inaccessible car il est privé dans
Base.
Comme les membres privés et protégés ne sont pas accessibles, nous devons créer des fonctions publiques getPVT()et getProt()y accéder:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Accessibilité dans l'héritage public
| Accessibilité | membres privés | membres protégés | membres du public |
|---|---|---|---|
| Classe de base | Oui | Oui | Oui |
| Classe dérivée | Non | Oui | Oui |
Exemple 2: héritage protégé par 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; )
Production
Accès privé impossible. Protégé = 2 Public = 3
Ici, nous avons dérivé ProtectedDerivedde Baseen mode protégé .
En conséquence, dans ProtectedDerived:
- prot, pub et
getPVT()sont hérités comme protégés . pvtest inaccessible car il est privé dansBase.
Comme nous le savons, les membres protégés ne sont pas accessibles directement.
En conséquence, nous ne pouvons pas utiliser getPVT()de ProtectedDerived. C'est aussi pourquoi nous devons créer la getPub()fonction ProtectedDerivedin afin d'accéder à la variable pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Accessibilité dans l'héritage protégé
| Accessibilité | membres privés | membres protégés | membres du public |
|---|---|---|---|
| Classe de base | Oui | Oui | Oui |
| Classe dérivée | Non | Oui | Oui (hérité en tant que variables protégées) |
Exemple 3: héritage privé 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; )
Production
Accès privé impossible. Protégé = 2 Public = 3
Ici, nous avons dérivé PrivateDerivedde Baseen mode privé .
En conséquence, dans PrivateDerived:
- prot
pubetgetPVT()sont hérités en tant que private . - pvt est inaccessible car il est privé dans
Base.
Comme nous le savons, les membres privés ne sont pas accessibles directement.
En conséquence, nous ne pouvons pas utiliser getPVT()de PrivateDerived. C'est aussi pourquoi nous devons créer la getPub()fonction PrivateDerivedin afin d'accéder à la variable pub.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Accessibilité dans l'héritage privé
| Accessibilité | membres privés | membres protégés | membres du public |
|---|---|---|---|
| Classe de base | Oui | Oui | Oui |
| Classe dérivée | Non | Oui (hérité en tant que variables privées) | Oui (hérité en tant que variables privées) |








