(voyez, par exemple, l’exercice 65).
Règles
Le mot-clé virtual ne s’emploie qu’une fois pour une fonction donnée ; plus
précisément, il ne doit pas accompagner les redéfinitions de cette fonction dans les
classes dérivées.
Une méthode déclarée virtuelle dans une classe de base peut ne pas être redéfinie
dans ses classes dérivées.
Une fonction virtuelle peut être surdéfinie (chaque fonction surdéfinie pouvant être ou
ne pas être virtuelle).
Un constructeur ne peut pas être virtuel, un destructeur peut l’être.
Par sa nature même, le mécanisme de ligature dynamique est limité à une hiérarchie
de classes ; souvent, pour qu’il puisse s’appliquer à toute une bibliothèque de
classes, on sera amené à faire hériter toutes les classes de la bibliothèque d’une
même classe de base.
Les fonctions virtuelles pures
Une « fonction virtuelle pure » se déclare avec une initialisation à zéro, comme dans :
virtual void affiche () = 0 ;
Lorsqu’une classe comporte au moins une fonction virtuelle pure, elle est considérée
comme « abstraite », c’est-à-dire qu’il n’est plus possible de créer des objets de son
type.
Une fonction déclarée virtuelle pure dans une classe de base peut ne pas être déclarée
dans une classe dérivée et, dans ce cas, elle est à nouveau implicitement fonction
virtuelle pure de cette classe dérivée (avant la version 3.0, une fonction virtuelle pure
devait obligatoirement être redéfinie dans une classe dérivée ou déclarée à nouveau
virtuelle pure).
275
Règles
Le mot-clé virtual ne s’emploie qu’une fois pour une fonction donnée ; plus
précisément, il ne doit pas accompagner les redéfinitions de cette fonction dans les
classes dérivées.
Une méthode déclarée virtuelle dans une classe de base peut ne pas être redéfinie
dans ses classes dérivées.
Une fonction virtuelle peut être surdéfinie (chaque fonction surdéfinie pouvant être ou
ne pas être virtuelle).
Un constructeur ne peut pas être virtuel, un destructeur peut l’être.
Par sa nature même, le mécanisme de ligature dynamique est limité à une hiérarchie
de classes ; souvent, pour qu’il puisse s’appliquer à toute une bibliothèque de
classes, on sera amené à faire hériter toutes les classes de la bibliothèque d’une
même classe de base.
Les fonctions virtuelles pures
Une « fonction virtuelle pure » se déclare avec une initialisation à zéro, comme dans :
virtual void affiche () = 0 ;
Lorsqu’une classe comporte au moins une fonction virtuelle pure, elle est considérée
comme « abstraite », c’est-à-dire qu’il n’est plus possible de créer des objets de son
type.
Une fonction déclarée virtuelle pure dans une classe de base peut ne pas être déclarée
dans une classe dérivée et, dans ce cas, elle est à nouveau implicitement fonction
virtuelle pure de cette classe dérivée (avant la version 3.0, une fonction virtuelle pure
devait obligatoirement être redéfinie dans une classe dérivée ou déclarée à nouveau
virtuelle pure).
275
