0

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

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

2 回答 2

2

虚拟继承意味着该类与实例化对象的层次结构中以相同方式(虚拟)继承的任何其他类共享其基类实例。

非虚拟继承意味着该类获得自己的基类实例,而不管从基类继承的任何其他类。

于 2012-10-19T08:11:39.250 回答
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继承 fromA是不明确的(它直接继承自,A但也继承自Athrough B)。

这将在没有警告的情况下编译:

class A {
public:
    int count;
};

class B : virtual public A {
};

class C : public B, virtual public A {
};

因为C只有一个 的共享实例A

于 2012-10-19T08:41:55.793 回答