EPFL
Faculté Informatique & Communications
Cours d'informatique

Mini-Référence :
POO : Héritage

L'héritage est une technique efficace permettant de dériver, à partir de classes préexistantes (appelées sur-classes ou classes parentes), des classes plus spécialisées (appelées sous-classes ou classes enfants).

Plus précisément, lorsqu'une sous-classe C1 est définie à partir d'une classe C, C1 va hériter de l'ensemble des attributs et méthodes de C, i.e. ces attributs et méthodes vont être disponibles (on dit aussi visibles) pour les instances de C1, sans que l'on ait besoin de les redéfinir explicitement.

L'héritage permet donc de définir implicitement certains des attributs et des méthodes de la sous-classe, en réutilisant ceux déjà définis dans la sur-classe, c'est-à-dire exprimer des relations structurelles ou sémantiques existant entre les notions modélisées par les classes d'une hierarchie, ce qui permet de réduire la redondance de description de ces classes.

L'héritage est transitif, ce qui veut dire en autre que les instances d'une sous-classe héritent à la fois des propriétés définies dans la classe parente, mais également des propriétés que cette classe parente a elle-même hérité d'une sur-classe.

La syntaxe C++ de la définition d'une sous-classe est :

class nom_sousclasse : public nom_surclasse {
     // définition des attributs et des
     //  méthodes spécifiques à la
     //  sous-classe
     ...
};

La définition des arguments de la classe parente se fait en début de section d'initialisation des constructeurs de la sous-classe, par l'invocation implicite du constructeur (parent) par défaut, ou par l'invocation explicite d'un des constructeur de cette classe parente.

L'héritage permet non seulement de réutiliser des attributs et des méthodes déjà définis, mais également de modifier (en fait il s'agirait plutôt de surcharge) ces attributs et méthodes. Par exemple, pour remplacer une méthode héritée :

class C {
   // définition de methode1
   type_retour methode1(arg1, ...) {
     ...
   }
};

class C1 : public C { // définition d'une sous-classe de C
   // nouvelle définition de methode1
   type_retour methode1(arg1, ...) {
     ...
   }
};

Dans ce cas, pour la classe C1, la nouvelle définition de la méthode methode1 remplace celle qui est héritée de la sur-classe, en ce sens que toute invocation traditionnelle de methode1 exécutera le code (re)définit dans cette classe C1. Pour référencer la méthode originelle, i.e. celle définie dans la classe C, il faut utiliser l'opérateur de résolution de portée « :: », en le préfixant de la classe parente: C::methode1(...).


Dernière mise à jour : $Date: 2009-09-11 17:10:52 +0200 (Fri, 11 Sep 2009) $  ($Revision: 25 $)