ALI

mardi 17 décembre 2013

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

L'héritage virtuel est un type d'héritage dans lequel la mise en œuvre d'une superclasse est incomplète, et une sous-classe est nécessaire pour la définition complète d'un objet. Ce type d'héritage peut être utilisé en conjonction avec l'héritage à la fois 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 compter sur une sous-classe pour mettre en œuvre toutes ses méthodes, mais ce n'est pas une obligation.
 
C + + est un langage le plus connu de l'ordinateur pour utiliser l'héritage virtuel. Pour déclarer l'héritage virtuel en C + +, le "virtuel" mot-clé est utilisé. Tant la superclasse et sous-classe doivent déclarer des méthodes virtuelles avec le mot-clé «virtuel». Cela signifie que le C + + compilateur vous que la classe est incomplète, et il doit obtenir des informations de la sous-classe pour le compléter. Utilisation de la sous-classe pour compléter la superclasse ne signifie pas que les sous-classes écraser l'autre si elles ont la même classe de base, et à la place du compilateur C + + prend soin de déterminer quelles pièces vont avec chaque objet.
Depuis une classe de base virtuelle est requise pour l'héritage virtuel, les fonctions globales en C + + ne peuvent pas être déclarés virtuel. Ce type d'héritage ne peut être utilisé lors de son adhésion la programmation orientée objet (POO) de principes. La raison à cela est que les fonctions globales ne sont pas associés à une catégorie particulière, et sont donc généralement autonome leur propre chef. Sans une superclasse et sous-classe héritage ne peut pas se produire, si les fonctions globales et l'héritage virtuel s'excluent mutuellement. Fonctions globales peuvent, en théorie, être utilisés à l'intérieur des fonctions virtuelles, mais l'inverse ne peuvent pas toujours travailler.
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é. Dans l'héritage multiple, on peut avoir une classe A de base qui a deux sous-classes, B et C, puis une classe D qui hérite de deux 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 mises en oeuvre de la même manière, il n'est pas possible de classe D pour déterminer quelle application qu'il doit utiliser. L'héritage virtuel permet de résoudre ce problème, car la mise en œuvre de chaque classe reste distincte, et donc sans ambiguïté. Cette distinction est gérée par les objets internes spécialisées appelées tables virtuelles (VTables) qui gardent la trace de chaque type d'objet, mais ces tableaux n'ont pas besoin d'être explicitement manipulé par un programmeur parce qu'ils sont construits dans la langue.