Mécanisme de Vptr et Vtable en C++

En C++, au cours de dynamique de la liaison, considérons l'exemple suivant...

class Base
{
  virtual void fun()
  {
     cout<<"Base";
  }      
};

class Derived : Base
{
   void fun()
   {
     cout<<"Derived";
   }
};

int main()
{
  Base *bptr;
  Derived d;
  bptr=&d;
  bptr->fun();
}

La sortie de la fonction ci-dessus est "Dérivé" en raison de la déclaration de mot clé virtual/de liaison dynamique.

Selon ma compréhension, une table virtuelle (Vtable) qui contient l'adresse de l'fonctions virtuelles. Dans ce cas, la table virtuelle créée pour la classe dérivée des points à l'héritage virtuel fun(). Et bptr->fun() va être résolu à bptr->vptr->fun();. C'est le héritée de la classe de base de la fonction elle-même. Je ne suis pas complètement clair sur la façon dont la classe dérivée de la fonction est appelée?

notez qu'il est int main, pas void main, et les déclarations de classe, la fin avec un ;.
Les réponses ci-dessous bonnes, mais si vous ressentez le besoin d'en lire plus sur le sujet, je vous recommande à l'Intérieur de l'Objet C++ (ISBN: 978-0201834543).

OriginalL'auteur Blue Diamond | 2013-10-07