继承的顺序是什么

时间:2012-10-19 08:03:15

标签: c++ multiple-inheritance virtual-inheritance

继承的顺序是什么,以下代码是什么意思

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
{
}

2 个答案:

答案 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的共享实例。