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からの継承Aがあいまいなためです(から直接継承しますAが、からも継承しAますB)。

これは警告なしでコンパイルされます:

class A {
public:
    int count;
};

class B : virtual public A {
};

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

Cの共有インスタンスは 1 つしかないためですA

于 2012-10-19T08:41:55.793 に答える