違いは何ですか
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を使用することを確認するために使用します。CA
ここから取得した情報: Virtual Base Classes