Skip to main content

Qu'est-ce que l'héritage virtuel?

L'héritage virtuel est un type d'héritage dans lequel l'implémentation d'une superclasse est incomplet, et une sous-classe est requise pour une définition complète d'un objet.Ce type d'héritage peut être utilisé en conjonction avec l'héritage unique et multiple, mais est le plus souvent utilisé dans l'héritage multiple.Toute classe qui hérite d'une classe de base virtuelle devient une sous-classe directe de cette classe de base.Une classe de base virtuelle peut s'appuyer sur une sous-classe pour implémenter toutes ses méthodes, mais ce n'est pas une exigence.

C ++ est le langage informatique le plus connu pour utiliser l'héritage virtuel.Pour déclarer l'héritage virtuel en C ++, le mot-clé virtuel est utilisé.La superclasse et la sous-classe doivent déclarer des méthodes virtuelles avec le mot-clé virtuel.Cela indique au compilateur C ++ que la superclasse est incomplète, et il doit obtenir des informations de la sous-classe pour la compléter.L'utilisation de la sous-classe pour compléter la superclasse ne signifie pas que les sous-classes se remplacent si elles ont la même classe de base, et à la place, le compilateur C ++ s'occupe de déterminer les pièces avec chaque objet.

puisseHéritage, les fonctions globales en C ++ ne peuvent pas être déclarées virtuelles.Ce type d'héritage ne peut être utilisé que lors de l'adhésion aux principes de programmation orientée objet (OOP).La raison en est que les fonctions globales ne sont pas associées à une classe particulière, et sont donc généralement autonomes.Sans un héritage de superclasse et de sous-classe ne peut pas se produire, donc les fonctions globales et l'héritage virtuel s'excluent mutuellement.Les fonctions globales peuvent, en théorie, être utilisées à l'intérieur des fonctions virtuelles, mais l'inverse peut ne pas toujours fonctionner. L'héritage virtuel est utilisé pour résoudre de nombreux problèmes de programmation, et l'un des plus utiles est la résolution de l'ambiguïté.En héritage multiple, on peut avoir une classe A de base A qui a deux sous-classes, B et C, puis une classe D qui hérite des classes B et C. Ce modèle est communément appelé le diamant de la mort parce que si les classes A, B,et c ont toutes des implémentations de la même méthode, il n'est pas possible pour la classe D de déterminer quelle implémentation il doit utiliser.L'héritage virtuel résout ce problème parce que chaque implémentation des classes reste distincte et donc sans ambiguïté.Cette distinction est gérée par des objets internes spécialisés appelés tables virtuelles (VTABL) qui gardent une trace de chaque type d'objet, mais ces tableaux n'ont pas besoin d'être manipulés explicitement par un programmeur car ils sont intégrés dans la langue.