Какова структура виртуальных таблиц в C ++?


Например, у меня есть два "интерфейса" и тип класса:

class IPlugin
{
  public:
    virtual void Load(void) = 0;
    virtual void Free(void) = 0;
};

class IFoo
{
  public:
    virtual void Foo(void) = 0;
};


class Tester: public IPlugin, public IFoo
{
   public:
           Tester() {};
          ~Tester() {};

           virtual void Load()
           {
              // Some code here
           }

           virtual void Free()
           {
              // Some code here
           }

           virtual void Foo(void)
           {
              // Some code here
           }
 };

Какая структура vtab на самом деле имеет, например, тип Tester ? И как будет действовать оператор dynamic_cast (я имею в виду, как оператор dynamic_cast будет сканировать vtab для преобразования действительного ссылочного типа) в выражении:

Tester* t = new Tester();
IPlugin* plg = dynamic_cast<IPlugin*>(t);
IFoo* f = dynamic_cast<IFoo*>(plg);  

Заранее спасибо!

7
задан Martin Liversage 3 May 2011 в 15:20
поделиться