Множественное наследование

#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.

Ответы на вопрос(4)

Ваш ответ на вопрос