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é public
dans 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
, protected
et 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
public
membres de la classe de basepublic
dans la classe dérivée et lesprotected
membres de la classe de base restentprotected
dans la classe dérivée. - l'héritage protégé rend les membres
public
etprotected
de la classe de baseprotected
dans la classe dérivée. - l'héritage privé rend les membres
public
etprotected
de la classe de baseprivate
dans 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é PublicDerived
de Base
en 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é ProtectedDerived
de Base
en mode protégé .
En conséquence, dans ProtectedDerived
:
- prot, pub et
getPVT()
sont hérités comme protégés . pvt
est 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 ProtectedDerived
in 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é PrivateDerived
de Base
en mode privé .
En conséquence, dans PrivateDerived
:
- prot
pub
etgetPVT()
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 PrivateDerived
in 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) |