#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 调用是编译时错误。我想用obj的B部分调用foo而不使用虚拟继承。我怎么做。
另外,在虚拟继承的情况下,为什么需要将偏移信息存储在vtable中。这可以在编译时确定。在上述情况下,如果我们将 foo 与 D 的对象一起传递,则只有在编译时我们才能计算 D 的 A 部分的偏移量。