Contenu du cours
Programmation Orientée Objet en C++
Programmation Orientée Objet en C++
Héritage Multiple
L'héritage multiple permet à une classe dérivée d'hériter de plusieurs classes de base. Cela signifie qu'une seule classe dérivée peut accéder aux membres (données et fonctions) de plusieurs classes de base, combinant ainsi efficacement leurs attributs et comportements.
Héritage multiple horizontal
Dans ce type d'héritage multiple, une classe hérite des propriétés et méthodes de plusieurs superclasses situées au même niveau dans la hiérarchie d'héritage. Considérons les classes
: Shape
et Color
, chacune possédant des propriétés et méthodes distinctes. La classe Shape
définit la forme d'un objet, tandis que la classe Color
définit sa couleur.
Shape.h
Color.h
class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };
Créons maintenant une sous-classe appelée ColoredShape
qui hérite des propriétés et méthodes des deux classes Shape
et Color
.
ColoredShape.h
#include "Shape.h" #include "Color.h" class ColoredShape : public Shape, public Color { public: void describe() { std::cout << "This object is a " << getShape() << " shape and is " << getColor() << '\n'; } };
Héritage vertical
Dans l'héritage en profondeur, une class
hérite des propriétés et méthodes de son parent direct et de ses ancêtres, formant ainsi une chaîne d'héritage. Par exemple, considérez la class
Vehicle
, qui peut servir de base pour l'héritage de Car
, Truck
et d'autres. Dans notre exemple, nous utiliserons la Car
pour illustrer ce concept.
Vehicle.h
Car.h
class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
Pour réaliser une héritage verticale, il est nécessaire de mettre en place une hiérarchie où une class
hérite d'une autre, puis une classe suivante hérite de la première, et ainsi de suite. Il est possible de créer une ElectricCar
qui hérite de toutes les propriétés et fonctionnalités de la Car
, laquelle hérite elle-même de la Vehicle
, établissant ainsi une structure de héritage multiple complexe.
ElectricCar.h
#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };
Pourquoi l’héritage multiple est-il nécessaire
L’héritage multiple offre flexibilité et réutilisation du code dans les situations où une class
doit présenter des comportements ou des caractéristiques provenant de plusieurs class
parentes. Voici quelques scénarios où l’héritage multiple est avantageux :
Rôles du monde réel : un oiseau volant peut combiner les caractéristiques des classes
Flying
etBird
, représentant ainsi les deux capacités. La classeFlying
peut également s’appliquer aux avions ou à d’autres objets volants.Réutilisation du code : l’héritage multiple permet à une classe de réutiliser des fonctionnalités issues de différentes classes de base sans duplication.
Interfaces ciblées : favorise la combinaison de petites interfaces spécifiques au lieu d’en utiliser une seule, large et générale.
Diviser un objet complexe en objets plus simples et utiliser l’héritage multiple pour créer des logiciels flexibles et maintenables.
Merci pour vos commentaires !