继承的顺序是什么,以下代码是什么意思
class A
{
int a;
virtual void display()
{
cout<<"A";
}
}
class B
{
int b;
virtual void displayB()
{
cout<<"B";
}
}
class C:public B, virtual public B
{
}
答案 0 :(得分:2)
虚拟继承意味着类共享它的基类实例,实例化对象层次结构中的任何其他类以相同的方式(虚拟地)继承它。 / p>
非虚拟继承意味着该类获取基类的自己的实例,而不管从基类继承的任何其他类。
答案 1 :(得分:1)
虚拟继承避免了继承循环。例如,这将发出警告:
class A {
public:
int count;
};
class B : public A {
};
class C : public B, public A {
};
给出:
prog.cpp:9: warning: direct base ‘A’ inaccessible in ‘C’ due to ambiguity
因为C
来自A
的继承含糊不清(它直接从A
继承,但它也从A
继承到B
)。
这将在没有警告的情况下编译:
class A {
public:
int count;
};
class B : virtual public A {
};
class C : public B, virtual public A {
};
因为C
只有一个A
的共享实例。