Passer au contenu principal
eLearner.app
Module 6 · Leçon 1 sur 213/18 dans le cours~12 min
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.

Code
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 private de la classe de base ne sont pas accessibles directement depuis la classe dérivée.
  • Les membres protected de 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é.

Code
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

Exercice#cpp.m6.l1.e1
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
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

Exercice#cpp.m6.l1.e2
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
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