2010-08-24 11 views
8

Possible en double:
why do I need virtual table?Quelle est Vtable en C++

Quelle est VTABLE en C++?
A savoir vtable est une table virtuelle qui a un tableau de pointeurs vers des fonctions virtuelles. Y a-t-il un article avec une implémentation pratique? (Toute visite sera appréciée)

+1

http://en.wikipedia.org/wiki/Virtual_method_table – DumbCoder

+0

http://stackoverflow.com/questions/2173493/virtual-table-c – DumbCoder

+3

Sauf si vous prévoyez d'écrire un compilateur ces informations ne sont pas pertinentes pour la compréhension C++ . –

Répondre

13

Les tables V (ou tables virtuelles) sont la façon dont la plupart des implémentations C++ polymorphisent. Pour chaque implémentation concrète d'une classe, il existe une table de pointeurs de fonction pour toutes les méthodes virtuelles. Un pointeur vers cette table (appelée table virtuelle) existe en tant que membre de données dans tous les objets. Quand on appelle une méthode virtuelle, on recherche la v-table de l'objet et on appelle la méthode de la classe dérivée appropriée.

+0

Si votre classe de base Foo a une méthode virtuelle, votre barre de classe dérivée aura une vtable et l'éditeur de liens la vérifiera (si elle manque, elle indique une référence non définie à 'vtable for Bar ') – Will

4

C++-Lite-Faq est un bon point de départ.

+0

Lien brisé, s'il vous plaît mettre à jour ou supprimer. – donturner

+0

@donturner IMHO downvoting était grossier. Googling C++ Lite Faq donne la page comme deuxième résultat. Vous pourriez m'avez sauvé d'autres ennuis en éditant la réponse vous-même. Après tout, la réponse est 7 ans. – phadej

+0

@phadej Seules les réponses sont désapprouvées pour cette raison: une ressource externe peut être déplacée ou supprimée ou modifiée et une réponse doit être auto-suffisante. – bolov

1

Pour tout ce que ça vaut, ce n'est pas une terminologie C++ standard. Il s'agit simplement d'un détail d'implémentation utilisé par l'implémentation pour implémenter des fonctions virtuelles/liaison dynamique.

+6

Ce n'est pas la terminologie de la norme, ou du tout normalisée, mais c'est un terme assez courant. Quoi qu'il en soit, ce serait mieux comme commentaire car il ne tente pas de répondre à la question. – Potatoswatter