Summry
Bibliothèque de cours

Héritage, constructeurs et polymorphisme en C++

4 générations
Résumé

I. Héritage

  • Définition : Mécanisme POO créant une classe à partir d'une existante, héritant attributs, méthodes, comportement.
  • But : Réutilisation code, spécialisation, hiérarchie logique.
  • Terminologie : Classe mère (base), classe fille (dérivée, sous-classe).
  • Exemple : Animal (mère) -> Chien (fille).
  • Règles d'accès :
    • Membres private classe mère : Inaccessibles par classe fille.
    • Membres protected classe mère : Accessibles par classe fille, inaccessibles de l'extérieur.
  • Types d'héritage :
    • public : Maintien niveau protection.
    • protected : Public/protected mère deviennent protected fille.
    • private : Public/protected mère deviennent private fille.

II. Héritage et constructeurs

  • Appel en cascade : Création objet dérivé -> appel constructeur mère -> appel constructeur fille.
  • Initialisation : Attributs hérités initialisés par constructeur mère.
  • Choix constructeur mère : Possible via liste d'initialisation (ex: : Personne(n, p, a)).
  • Ordre construction : Hiérarchique, de la classe la plus générale à la plus spécifique (ex: Animal -> Chien -> Chiwawa).

III. Masquage

  • Définition : Méthode classe fille même nom que méthode classe mère.
  • Conséquence : Méthode mère cachée, méthode fille appelée pour objets dérivés.
  • Appel : Dépend du type statique de la variable (pas type réel objet) si méthode non virtuelle.
  • Raison : Personnaliser comportement pour classe fille.
  • Bonne pratique : Appeler méthode mère (ClasseMere::methode()) puis ajouter spécificités fille pour éviter duplication code.

IV. Polymorphisme

  • Problématique : Stocker différents types d'objets (ex: Personne, Etudiant) dans même conteneur (ex: vector<Personne*>).
  • Observation : Etudiant est une Personne, Etudiant* peut être stocké dans Personne*.
  • Problème sans polymorphisme : Appel méthode non virtuelle (ex: afficher()) basé sur type statique du pointeur (Personne*), pas type réel objet.
  • Solution : Déclarer méthode comme virtual dans classe mère (virtual void afficher();).
  • Résultat avec polymorphisme : Appel méthode dépend du type réel de l'objet pointé.

V. Conteneurs et parcours par itérateur

  • Itérateurs :
    • Utilité : Flexibilité, parcours tous conteneurs STL, interaction précise éléments, utilisation algorithmes génériques.
    • Exemple : vector<int>::iterator it; for (it = v.begin(); it != v.end(); it++).
  • Conteneurs STL (vue d'ensemble) :
    • Séquence : vector (dynamique, accès index), list (chaînée).
    • Associatifs : set (uniques), map (clé/valeur).
    • Adaptateurs : stack, queue, priority_queue.
  • Bibliothèque <algorithm> :
    • Fonctions : sort, find, count, copy, etc.
    • Utilisation : Avec tous conteneurs via itérateurs (ex: sort(v.begin(), v.end());).