Retour au cours

Fiche de revision sur Héritage, constructeurs et polymorphisme en C++

Appartient au cours : Héritage, constructeurs et polymorphisme en C++

🧠 Fiche de Révision : Héritage et Polymorphisme en POO


🔄 1. Qu’est-ce que l’héritage en POO ?

  • Définition : Mécanisme permettant de créer une classe fille à partir d’une classe mère, en héritant de ses attributs, méthodes et comportement.
  • But :
    • Réutilisation du code.
    • Spécialisation des classes.
    • Création d’une hiérarchie logique.

📚 Terminologie clé

TermeDéfinition
Classe mèreClasse de base (ex: Animal).
Classe filleClasse dérivée (ex: Chien).

🔐 2. Comment gérer l’accès aux membres hérités ?

⚠️ Règles d’accès

  • private : Inaccessible depuis la classe fille.
  • protected : Accessible uniquement par la classe fille (pas depuis l’extérieur).
  • public : Accessible partout.

🔧 Types d’héritage

TypeEffet sur les membres de la classe mère
publicMaintient leur niveau de protection.
protectedpublic/protected → protected.
privateTous les membres → private.

🏗️ 3. Comment fonctionnent les constructeurs en héritage ?

🔄 Ordre d’appel

  1. Constructeur de la classe mère (ex: Animal).
  2. Constructeur de la classe fille (ex: Chien).
  3. Constructeur de la classe la plus spécifique (ex: Chiwawa).

🛠️ Initialisation des attributs

  • Les attributs hérités sont initialisés par le constructeur de la classe mère.
  • Choix du constructeur mère : Via la liste d’initialisation.
    Chien::Chien(string n, string p, int a) : Animal(n, p, a) {}
    

🎭 4. Qu’est-ce que le masquage en POO ?

  • Définition : Une méthode de la classe fille porte le même nom qu’une méthode de la classe mère.
  • Conséquence : La méthode mère est cachée pour les objets de la classe fille.

💡 Bonne pratique

  • Appeler la méthode mère avant d’ajouter des spécificités :
    void Chien::afficher() {
        Animal::afficher(); // Appel méthode mère
        cout << "Je suis un chien !"; // Spécificités fille
    }
    

🔄 5. Qu’est-ce que le polymorphisme ?

❓ Problématique

  • Stocker des objets de types différents (ex: Personne, Etudiant) dans un même conteneur (ex: vector<Personne*>).
  • Sans polymorphisme : L’appel d’une méthode dépend du type statique du pointeur (ex: Personne*), pas du type réel de l’objet.

✅ Solution

  • Déclarer la méthode comme virtual dans la classe mère :
    virtual void afficher();
    
  • Résultat : L’appel dépend du type réel de l’objet pointé.

📦 6. Conteneurs STL et itérateurs

🔄 Itérateurs

  • Utilité :

    • Parcours flexible des conteneurs.
    • Interaction précise avec les éléments.
    • Utilisation avec les algorithmes génériques.
  • Exemple de parcours :

    vector<int>::iterator it;
    for (it = v.begin(); it != v.end(); it++) {
        cout << *it << endl;
    }
    

🗃️ Types de conteneurs STL

TypeExemplesUtilisation
Séquencevector, listStockage dynamique, accès index.
Associatifsset, mapClés uniques, paires clé/valeur.
Adaptateursstack, queue, priority_queueStructures LIFO, FIFO, triée.

⚙️ Bibliothèque <algorithm>

  • Fonctions clés : sort, find, count, copy, etc.
  • Utilisation : Avec les itérateurs.
    sort(v.begin(), v.end());
    

🧩 Ancrage Mémoriel

  • Héritage = Réutilisation + Spécialisation (ex: Animal → Chien).
  • protected = Accès limité à la classe fille.
  • Polymorphisme = Méthode virtual + type réel de l’objet.
  • Itérateurs = Flexibilité pour parcourir les conteneurs.
  • Masquage = Méthode fille cache la méthode mère.