Как работает Dynami c Cast между двумя классами, имеющими общий производный класс - PullRequest
3 голосов
/ 24 февраля 2020

В приведенном ниже коде у меня есть класс Derived1, который является производным от двух классов / struct (I1 и Base). Используя это отношение, я могу динамически c привести указатель базового типа к типу I1. Что я не мог понять с точки зрения Vtable. Может кто-нибудь объяснить, как это работало (в терминах Vtable).

 struct Base
 {    
    virtual ~Base() {};
 };

 struct I1
 { 
     virtual void f1() = 0;
 };

//---------------------------------------------
struct Derived1 : public Base, public I1 
{
    void f1() { std::cout << __FUNCTION__ << std::endl; }
};

//---------------------
Base* getBase()
{
    return new Derived1;
}

int main()
{

    Base* base = getBase();

Я не понимал, как работает приведенный ниже динамический c бросок, когда между нижними двумя классами нет отношения родительского chid. Как это работает?

    I1* i1 = dynamic_cast<I1*>(base);    
    i1->f1();

    return 0;
}
...