Множественное наследование
#include<iostream>
using namespace std;
class A
{
int a;
int b;
public:
void eat()
{
cout<<"A::eat()"<<endl;
}
};
class B: public A
{
public:
void eat()
{
cout<<"B::eat()"<<endl;
}
};
class C: public A
{
public:
void eat()
{
cout<<"C::eat()"<<endl;
}
};
class D: public B, C
{
};
int foo(A *ptr)
{
ptr->eat();
}
main()
{
D obj;
foo(&(obj.B)); //error. How do i call with D's B part.
}
Вышеуказанный вызов foo является ошибкой времени компиляции. Я хочу вызвать foo с частью B объекта obj, не используя виртуальное наследование. Как я могу это сделать.
Кроме того, в случае виртуального наследования, почему информация о смещении должна храниться в виртуальной таблице. Это можно определить во время самой компиляции. В приведенном выше случае, если мы передадим foo с объектом D, только во время компиляции мы сможем вычислить смещение части A D.