2009-08-02 14 views
1

Si j'ai une classe de base et que j'en dérive 10 classes dérivées concrètes différentes, alors chaque classe dérivée concrète aura-t-elle une vtable différente?vtables pour les classes dérivées, concrètes,

+0

Quelle langue/runtime/compilateur etc.? –

+0

Ma conjecture est C++. C'est le seul langage populaire qui possède à la fois des méthodes virtuelles et non virtuelles. – EFraim

+0

Pourquoi est-ce marqué comme subjectif? –

Répondre

0

Cela dépend si vos classes dérivées remplacent ou déclarent des méthodes virtuelles.

4

Si la classe de base ou toutes les classes dérivées ont des fonctions virtuelles, alors oui, habituellement. Pourquoi c'est important?

Deux classes ne peuvent partager un vtable que si elles possèdent un ensemble indentical de fonctions virtuelles. Ainsi, une classe dérivée ne peut partager un vtable avec une classe de base que si elle ne remplace aucune fonction virtuelle. Une classe dérivée ne peut partager une vtable avec aucune autre classe dérivée à moins qu'elles ne remplacent aucune des fonctions de la même classe de base car, même si elles sont implémentées de la même manière, les fonctions membres d'une classe dérivée sont un type différent des fonctions membres d'une classe dérivée différente.

+0

J'étais juste confus que si toutes les classes dérivées vont utiliser une seule table v ou ils vont avoir différent –

+0

oui en effet chaque classe dérivée chevauche les fonctions virtuelles de leur propre puisque la classe de base est purement abstraite, alors il y aura b séparer v tables ??? –

+3

Ils ne peuvent partager un vtable que s'ils ont un ensemble indentical de fonctions virtuelles. Cela signifie qu'une classe dérivée ne peut partager un vtable avec une classe de base que si elle ne remplace aucune fonction virtuelle. –

Questions connexes