J'ai souvent entendu dire que les fonctions virtuelles sont généralement implémentées en utilisant une table virtuelle. Mais je ne sais pas vraiment comment elle est mise en œuvre et comment elle fonctionne.
modifier
Je n'ai pas vraiment eu ce code : Comment le réécrire. Quelqu'un peut-il l'expliquer en détail, s'il vous plaît ?
Enfin, voyons comment le compilateur implémente un appel à une fonction virtuelle. Votre code pourrait ressembler à ceci :
// Your original C++ code
void mycode(Base* p)
{
p->virt3();
}
Le compilateur n'a aucune idée si cela va appeler Base::virt3()
o Der::virt3()
ou peut-être le virt3()
d'une autre classe dérivée qui n'existe même pas encore. Il sait seulement avec certitude que vous appelez virt3()
qui se trouve être la fonction dans le slot #3 de la table V. Il réécrit cet appel en quelque chose comme ceci :
// Pseudo-code that the compiler generates from your C++
void mycode(Base* p)
{
p->__vptr[3](p);
}