Retour au cours
⚙️ Bibliothèque
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é
| Terme | Définition |
|---|---|
| Classe mère | Classe de base (ex: Animal). |
| Classe fille | Classe 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
| Type | Effet sur les membres de la classe mère |
|---|---|
public | Maintient leur niveau de protection. |
protected | public/protected → protected. |
private | Tous les membres → private. |
🏗️ 3. Comment fonctionnent les constructeurs en héritage ?
🔄 Ordre d’appel
- Constructeur de la classe mère (ex:
Animal). - Constructeur de la classe fille (ex:
Chien). - 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
virtualdans 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
| Type | Exemples | Utilisation |
|---|---|---|
| Séquence | vector, list | Stockage dynamique, accès index. |
| Associatifs | set, map | Clés uniques, paires clé/valeur. |
| Adaptateurs | stack, queue, priority_queue | Structures 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.