GeeksforGeeks (Français)

La capacité d’une classe à dériver des propriétés et des caractéristiques d’une autre classe est appelée héritage. L’héritage est l’une des caractéristiques les plus importantes de la programmation orientée objet.
Sous Classe: La classe qui hérite des propriétés d’une autre classe est appelée Sous-classe ou Classe Dérivée.
Super Class: la classe dont les propriétés sont héritées par sous-classe est appelée classe de Base ou Super classe.

L’article est divisé en les sous-rubriques suivantes:

  1. Pourquoi et quand utiliser l’héritage?,
  2. Modes de transmission
  3. Types d’Héritage

Pourquoi et quand utiliser l’héritage?

un groupe de véhicules. Vous devez créer des classes pour Bus, Voiture et camion. Les méthodes fuelAmount(), capacity(), applyBrakes() seront les mêmes pour les trois classes., Si nous créer ces classes en évitant l’héritage alors nous devons l’écrire toutes ces fonctions dans chacune des trois classes, comme indiqué dans la figure ci-dessous:

Vous pouvez clairement voir que ci-dessus les résultats du processus de duplication du même code 3 fois. Cela augmente les risques d’erreur et de redondance des données. Pour éviter ce type de situation, l’héritage est utilisé., Si nous créons un véhicule de classe et y écrivons ces trois fonctions et héritons du reste des classes de la classe de véhicule, nous pouvons simplement éviter la duplication des données et augmenter la réutilisation. Regardez le diagramme ci-dessous dans lequel les trois classes sont héritées de la classe vehicle:

En utilisant l’héritage, nous devons écrire les fonctions une seule fois au lieu de trois fois car nous avons hérité du reste des trois classes de la classe de base(véhicule).,

implémentation de l’héritage en C++: pour créer une sous-classe héritée de la classe de base, nous devons suivre la syntaxe ci-dessous.
Syntaxe:

class subclass_name : access_mode base_class_name{ //body of subclass};

Ici, subclass_name est le nom de la sous-classe, access_mode est le mode dans lequel vous voulez hériter de la présente sous-classe, par exemple: public, privé, etc. et base_class_name est le nom de la classe de base à partir de laquelle vous souhaitez hériter de la sous-classe.
remarque: une classe dérivée n’hérite pas de l’accès aux membres de données privées., Cependant, il hérite d’un objet parent complet, qui contient tous les membres privés que cette classe déclare.



la Sortie:

Child id is 7Parent id is 91

Dans le programme ci-dessus « l’Enfant » de la classe est publiquement héritées du Parent de la classe de sorte que le public les données membres de la classe « Parent » sera héritée par la classe « Enfant ».

Modes D’héritage

  1. Mode Public: si nous dérivons une sous-classe d’une classe de base publique., Ensuite, les membres publics de la classe de base seront rendus publics dans la classe dérivée et des membres protégés de la classe de base seront protégés dans la classe dérivée.
  2. mode protégé: si nous dérivons une sous-classe d’une classe de base protégée. Ensuite, les membres publics et les membres protégés de la classe de base deviendront protégés dans la classe dérivée.
  3. mode privé: si nous dérivons une sous-classe d’une classe de base privée. Ensuite, les membres publics et les membres protégés de la classe de base deviendront privés dans la classe dérivée.,

Remarque : les membres privés de la classe de base ne peuvent pas être directement accessibles dans la classe dérivée, tandis que les membres protégés peuvent être directement accessibles. Par exemple, les Classes B, C et D contiennent toutes les variables x, y et z dans l’exemple ci-dessous. Il est juste question de l’accès.,

le tableau ci-dessous résume les trois modes ci-dessus et montre le spécificateur d’accès des membres de la classe de base dans la sous-classe lorsqu’il est dérivé en modes public, protégé et privé:

types d’héritage en C++

une classe dérivée avec deux classes de base et ces deux classes de base ont une classe de base commune est appelée héritage multipath. Une ambiguïté peut survenir dans ce type d’héritage.,

Considérons le programme suivant:



la Sortie:

A from ClassB : 10A from ClassC : 100B : 20C : 30D : 40

Dans l’exemple ci-dessus, les deux ClassB & ClassC hériter ClassA, ils ont tous deux un seul exemplaire de ClassA. Cependant ClassD hérite des deux ClassB & ClassC, donc ClassD a deux copies de ClassA, une de ClassB et une autre de ClassC.,
Si nous avons besoin d’accéder au membre de données a de ClassA via L’objet de ClassD, nous devons spécifier le chemin d’accès à partir duquel a sera accessible, que ce soit depuis ClassB ou ClassC, le compilateur bco’Z ne peut pas différencier deux copies de ClassA dans ClassD.
Il y a 2 façons d’éviter cette ambiguïté:

  1. utiliser l’opérateur de résolution de portée
  2. utiliser la classe de base virtuelle

éviter l’ambiguïté utiliser l’opérateur de résolution de portée:
Utiliser l’opérateur de résolution de portée nous pouvons spécifier manuellement le chemin à partir duquel le membre de,

obj.ClassB::a = 10;
obj.ClassC::a = 100;



Note : cependant, il existe deux copies de ClassA dans ClassD.,
d’Éviter toute ambiguïté à l’aide virtuel de la classe de base:



Résultat:

A : 100B : 20C : 30D : 40

Selon l’exemple ci-dessus, ClassD n’a qu’une copie de ClassA, par conséquent, déclaration 4 écrasera la valeur d’une donnée à l’instruction 3.

Cet article est rédigé par Harsh Agarwal. Si vous aimez GeeksforGeeks et souhaitez contribuer, vous pouvez également écrire un article en utilisant contribute.geeksforgeeks.org ou envoyez votre article à [email protected]., Voir votre article apparaissant sur la page principale GeeksforGeeks et aider les autres Geeks.

Attention du lecteur! N’arrêtez pas d’apprendre maintenant. Obtenez tous les concepts importants C++ Foundation et STL avec les cours C++ Foundation et STL à un prix adapté aux étudiants et devenez prêt pour l’industrie.

Tags de L’Article:

C++
tags De La pratique :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *