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, ...)
{
...
}
};
// définition d'une sous-classe de C
class C1 : public 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: 2006/10/03 11:16:30 $ ($Revision: 1.1.1.1 $)
|