虽然与继承玩耍,正好试试这个:在多级继承中派生的虚拟基类会发生什么?
class A
{ int i; };
class B : virtual public A
{ int j; };
class C : public B
{ int k; };
int main()
{
std::cout<<sizeof(C)/sizeof(int);
return 0;
}
这给了我输出6
虽然下面的预期一样给输出3
class A
{ int i; };
class B : public A // No virtual here
{ int j; };
class C : public B
{ int k; };
int main()
{
std::cout<<sizeof(C)/sizeof(int);
return 0;
}
为什么这个区别 ?而且,为什么它是第二种情况的两倍?
'int * cip =&i;'通过这个你的意思是指向C中的继承成员我的指针?如果是这样,那么在虚拟继承中,实际上只有指针被继承,而不是具有相同名称的成员? – asheeshr
@AshRj - 这个答案是关于实现的细节。不管如何实现虚拟继承,虚拟基础的成员都是继承的;您可以直接通过派生类型的对象来引用它们,而不必知道它们来自基类。 –