Héritage public, protégé et privé dans la programmation C ++

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 base publicdans la classe dérivée et les protectedmembres de la classe de base restent protecteddans la classe dérivée.
  • l'héritage protégé rend les membres publicet protectedde la classe de base protecteddans la classe dérivée.
  • l'héritage privé rend les membres publicet protectedde la classe de base privatedans 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é dans Base.

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 pubet getPVT()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)

Articles intéressants...