В приведенном ниже коде у меня есть класс 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;
}