Leçons du module (1/2)
Héritage en C++
L'héritage (inheritance) est l'un des piliers de la programmation orientée objet (POO). Il permet à une nouvelle classe (appelée classe dérivée ou fille) d'acquérir les membres (attributs et méthodes) d'une classe existante (appelée classe de base ou parent), favorisant ainsi la réutilisation du code.
Syntaxe de base
En C++, on spécifie l'héritage en utilisant l'opérateur : après le nom de la classe dérivée, suivi du type d'accès (généralement public) et du nom de la classe de base.
class Shape {
public:
void setColor(std::string c) {
color = c;
}
protected:
std::string color; // Accessibile dalle classi derivate
};
// Rectangle eredita public-mente da Shape
class Rectangle : public Shape {
public:
double getArea() {
return width * height;
}
private:
double width {0.0};
double height {0.0};
};
Spécificateurs d'accès : protected
En plus de public et private, l'héritage introduit le spécificateur protected :
- Les membres
privatede la classe de base ne sont pas accessibles directement depuis la classe dérivée. - Les membres
protectedde la classe de base sont inaccessibles depuis l'extérieur, mais ils sont accessibles directement à l'intérieur des classes dérivées.
Initialisation de la classe de base
Les constructeurs ne sont pas hérités automatiquement. Lors de l'instanciation d'une classe dérivée, le constructeur de la classe de base est appelé en premier. Si la classe de base nécessite des arguments, nous devons l'appeler explicitement dans la member initializer list (liste d'initialisation des membres) du constructeur dérivé.
class Parent {
public:
Parent(int x) {
std::cout << "Parent: " << x << std::endl;
}
};
class Child : public Parent {
public:
// Chiamata esplicita al costruttore Parent
Child(int x, int y) : Parent(x) {
std::cout << "Child: " << y << std::endl;
}
};
À vous de jouer
Créez une classe Dog qui hérite de manière public de la classe Animal. La classe Dog doit inclure une méthode public play() qui affiche 'Playing' via std::cout.
Afficher l'indice
Utilisez la syntaxe `:` suivie de `public Animal` pour étendre la classe de base, puis écrivez la méthode `play()`.
Solution disponible après 3 tentatives
Complétez la classe Car en héritant de Vehicle. Écrivez un constructeur pour Car qui accepte un std::string b et le passe au constructeur de Vehicle via la liste d'initialisation.
Afficher l'indice
Dans le constructeur de `Car`, utilisez la syntaxe `: Vehicle(b)` juste après la parenthèse des paramètres pour déléguer l'initialisation du brand à la classe de base.
Solution disponible après 3 tentatives