Multiple Inheritance

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

}

Der obige foo-Aufruf ist ein Fehler beim Kompilieren. Ich möchte foo mit objs B-Teil aufrufen, ohne die virtuelle Vererbung zu verwenden. Wie mache ich das

Auch im Falle einer virtuellen Vererbung, warum die Versatzinformationen in der vtable gespeichert werden müssen. Dies kann zum Zeitpunkt der Kompilierung selbst festgelegt werden. Im obigen Fall können wir, wenn wir foo mit dem Objekt von D übergeben, nur zur Kompilierungszeit den Versatz von Ds A-Teil berechnen.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage