継承の順序と次のコードの意味
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
{
}
継承の順序と次のコードの意味
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
{
}
仮想継承とは、クラスがその基本クラスのインスタンスを、インスタンス化されたオブジェクトの階層内で同じ方法で (仮想的に) 継承する他のクラスと共有することを意味します。
非仮想継承とは、基本クラスから継承する他のクラスに関係なく、クラスが基本クラスの独自のインスタンスを取得することを意味します。
仮想継承は、継承ループを回避します。たとえば、これは警告を発行します。
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
。