Herança múltipla

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

}

A chamada foo acima é um erro de tempo de compilação. Eu quero chamar foo com a parte B do obj sem usar herança virtual. Como faço isso.

Além disso, no caso de herança virtual, por que as informações de deslocamento precisam ser armazenadas na vtable. Isso pode ser determinado no próprio tempo de compilação. No caso acima, se passarmos com o objeto de D, somente em tempo de compilação podemos calcular o deslocamento da parte A de D.

questionAnswers(4)

yourAnswerToTheQuestion