Transtypage

Le langage C++ prévoit que si une classe est dérivée d'une classe de base contenant des fonctions virtuelles, un pointeur vers ce type de classe de base peut être utilisé pour appeler les implémentations des fonctions virtuelles résidant dans l'objet classe dérivé. Une classe contenant des fonctions virtuelles est parfois appelée une classe polymorphe.

Étant donné qu'une classe dérivée contient les définitions de toutes les classes de base dont elle est dérivée, il est possible de convertir un pointeur qui va jusqu'en haut de la hiérarchie de classes en l'une de ces classes de base. S'il existe un pointeur vers une classe de base, il est possible de le convertit jusqu'en bas de la hiérarchie. Cela est possible si l'objet qui est pointé est réellement d'un type dérivé de la classe de base. Dans ce cas, l’objet réel est dit être l'« objet complet ». Le pointeur vers la classe de base est dit pour pointer vers un « sous-objet » de l’objet complet. Considérons, par exemple, la hiérarchie de classe représentée dans l'illustration ci-dessous.

Diagram of a class hierarchy where C derives from B, which derives from A.
Hiérarchie de classes

Un objet de type C peut être visualisé comme indiqué dans l'illustration ci-dessous.

Diagram of Class C with subobjects B and A.
Classe C avec les sous-objets B et A

Avec une instance de classe C, il y a un sous-objet B et un sous-objet A. L'instance de C, avec les sous-objets A et B forme l'objet complet.

En utilisant les informations de type au moment de l'exécution, il est possible de vérifier si un pointeur pointe réellement vers un objet complet et peut être casté sans risque vers un autre objet de sa hiérarchie. L’opérateur dynamic_cast peut être utilisé pour effectuer ces types de casts. Il exécute également le contrôle à l'exécution nécessaire pour sécuriser l'opération.

Pour la conversion de types nonmorphes, vous pouvez utiliser l’opérateur static_cast (cette rubrique explique la différence entre les conversions de cast statiques et dynamiques, et quand il est approprié d’utiliser chacun).

Cette section couvre les sujets suivants :

Voir aussi

Expressions