1

違いは何ですか

class A {};
class Z: public A {};

class A {};
class Z: virtual public A {};
4

3 に答える 3

8

追加の継承階層がないと仮定すると、この場合の違いはありません。違いを確認する唯一の方法は、複数の方法で同じクラスを継承することです。たとえば、次のようにします。

class ZA : public Z, public A {};

対。

class ZA : virtual public Z, virtual public A {};

最初のケースでZAは、 には 2 つの領域がありA、1 つは直接継承され、もう 1 つは を介し​​て継承されZます。2 番目のケースでは、1 つのみが存在Aし、両方のパスを介して継承され、共有されます。

これを図示すると次のようになります。

仮想継承と通常継承

于 2013-09-13T13:48:52.180 に答える
0

2 つの派生クラスがBありC、共通の基本クラスがあるとしAます。Dそして、それらの両方を継承する別のクラスがあります。public virtual Aと の両方が同じサブオブジェクトBを使用することを確認するために使用します。CA

ここから取得した情報: Virtual Base Classes

于 2013-09-13T13:51:06.877 に答える