Rappels
Typage statique des objets (ou ligature dynamique des
fonctions)
Les règles de compatibilité entre une classe de base et une classe dérivée permettent
d’affecter à un pointeur sur une classe de base la valeur d’un pointeur sur une classe
dérivée. Toutefois, par défaut, le type des objets pointés est défini lors de la
compilation. Par exemple, avec :
class A class B : public A
{ ..... { .....
public : public :
void fct (...) ; void fct (...) ;
..... .....
} ; } ;
A * pta ;
B * ptb ;
une affectation telle que pta = ptb est autorisée. Néanmoins, quel que soit le contenu de
pta (autrement dit, quel que soit l’objet pointé par pta), pta->fct(...) appelle toujours la
fonction fct de la classe A.
Les fonctions virtuelles
L’emploi des fonctions virtuelles permet d’éviter les problèmes inhérents au typage
statique. Lorsqu’une fonction est déclarée virtuelle (mot-clé virtual) dans une classe,
les appels à une telle fonction ou à n’importe laquelle de ses redéfinitions dans des
classes dérivées sont « résolus » au moment de l’exécution, selon le type de l’objet
concerné. On parle de typage dynamique des objets (ou de ligature dynamique des
fonctions). Par exemple, avec :
class A class B : public A
{ ..... { .....
public : public :
virtual void fct (...) ; void fct (...) ;
..... .....
}; } ;
A * pta ;
l’instruction pta->fct (...) appellera la fonction fct de la classe correspondant
réellement au type de l’objet pointé par pta.
N.B. Il peut y avoir ligature dynamique même en dehors de l’utilisation de pointeurs
274
Précédent

- 275/398

Suivant