Menu
Coddy logo textTech

Héritage de base

Fait partie de la section Programmation Orientée Objet du Journey C++ de Coddy — leçon 48 sur 104.

L'héritage permet à une classe d'acquérir les propriétés et les comportements d'une autre classe. La classe dont on hérite est appelée la classe de base (ou parent), et la classe qui hérite est appelée la classe dérivée (ou enfant).

Pour créer une classe dérivée, utilisez deux-points suivis du spécificateur d'accès et du nom de la classe de base :

class Animal {
public:
    std::string name;
    
    void eat() {
        std::cout << name << " is eating" << std::endl;
    }
};

class Dog : public Animal {
public:
    void bark() {
        std::cout << name << " says woof!" << std::endl;
    }
};

La classe Dog a désormais accès à la fois à name et eat() de Animal, en plus de sa propre méthode bark(). C'est l'essence même de l'héritage : réutiliser le code existant tout en ajoutant de nouvelles fonctionnalités.

Dog myDog;
myDog.name = "Buddy";
myDog.eat();    // Hérité de Animal
myDog.bark();   // Défini dans Dog

Le mot-clé public devant Animal spécifie le type d'héritage. L'héritage public signifie que les membres publics de la classe de base restent publics dans la classe dérivée. C'est la forme la plus courante et elle modélise une relation « est un » : un Dog est un Animal.

challenge icon

Défi

Facile

Construisons une hiérarchie de véhicules simple qui démontre l'héritage en action. Vous allez créer une classe de base Vehicle et une classe dérivée Motorcycle qui l'étend avec un comportement spécialisé.

Vous organiserez votre code sur trois fichiers :

  • Vehicle.h : Définissez une classe de base Vehicle avec :
    • Un membre public std::string brand
    • Un membre public int year
    • Une méthode publique displayInfo() qui affiche la marque et l'année du véhicule au format : Brand: <brand>, Year: <year>
  • Motorcycle.h : Définissez une classe Motorcycle qui hérite publiquement de Vehicle. Cette classe dérivée doit ajouter :
    • Un membre public int engineCC pour la cylindrée du moteur
    • Une méthode publique revEngine() qui affiche : <brand> goes vroom vroom!

    La classe Motorcycle héritera automatiquement de brand, year et displayInfo() de Vehicle.

  • main.cpp : Lisez trois entrées (chacune sur une ligne séparée) :
    1. Nom de la marque (chaîne de caractères)
    2. Année (entier)
    3. Cylindrée du moteur (entier)

    Créez un objet Motorcycle, définissez ses membres hérités (brand et year) ainsi que son propre membre engineCC. Ensuite, démontrez l'héritage en appelant à la fois la méthode héritée et la méthode spécifique à la moto.

    Format de sortie :

    Brand: <brand>, Year: <year>
    Engine: <engineCC>cc
    <brand> goes vroom vroom!

Par exemple, avec les entrées Harley, 2022 et 1200 :

Brand: Harley, Year: 2022
Engine: 1200cc
Harley goes vroom vroom!

N'oubliez pas d'inclure des gardes d'inclusion (header guards) dans vos fichiers d'en-tête et d'utiliser #include "Vehicle.h" dans votre en-tête Motorcycle pour accéder à la classe de base.

Aide-mémoire

L'héritage permet à une classe d'acquérir les propriétés et les comportements d'une autre classe. La classe dont on hérite est la classe de base (parent), et la classe qui hérite est la classe dérivée (enfant).

Pour créer une classe dérivée, utilisez deux points suivis du spécificateur d'accès et du nom de la classe de base :

class Animal {
public:
    std::string name;
    
    void eat() {
        std::cout << name << " is eating" << std::endl;
    }
};

class Dog : public Animal {
public:
    void bark() {
        std::cout << name << " says woof!" << std::endl;
    }
};

La classe dérivée a accès aux membres publics de la classe de base plus ses propres membres :

Dog myDog;
myDog.name = "Buddy";
myDog.eat();    // Hérité de Animal
myDog.bark();   // Défini dans Dog

Le mot-clé public spécifie l'héritage public, ce qui signifie que les membres publics de la classe de base restent publics dans la classe dérivée. Cela modélise une relation de type « est un ».

Essayez vous-même

#include <iostream>
#include <string>
#include "Motorcycle.h"

using namespace std;

int main() {
    string brand;
    int year;
    int engineCC;

    cin >> brand;
    cin >> year;
    cin >> engineCC;

    // TODO: Créer un objet Motorcycle
    // TODO: Définir ses membres brand, year, et engineCC
    // TODO: Appeler displayInfo() pour afficher les informations héritées
    // TODO: Imprimer les informations du moteur au format : Engine: <engineCC>cc
    // TODO: Appeler revEngine() pour démontrer le comportement spécifique à la moto

    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet