違いは何ですか
class A {};
class Z: public A {};
と
class A {};
class Z: virtual public A {};
違いは何ですか
class A {};
class Z: public A {};
と
class A {};
class Z: virtual public A {};
追加の継承階層がないと仮定すると、この場合の違いはありません。違いを確認する唯一の方法は、複数の方法で同じクラスを継承することです。たとえば、次のようにします。
class ZA : public Z, public A {};
対。
class ZA : virtual public Z, virtual public A {};
最初のケースでZA
は、 には 2 つの領域がありA
、1 つは直接継承され、もう 1 つは を介して継承されZ
ます。2 番目のケースでは、1 つのみが存在A
し、両方のパスを介して継承され、共有されます。
これを図示すると次のようになります。
2 つの派生クラスがB
ありC
、共通の基本クラスがあるとしA
ます。D
そして、それらの両方を継承する別のクラスがあります。public virtual A
と の両方が同じサブオブジェクトB
を使用することを確認するために使用します。C
A
ここから取得した情報: Virtual Base Classes