それらはすべて である必要がありますvirtual
。C++11 10.1 [class.mi]/7 から:
クラスは、特定の型の仮想基本クラスと非仮想基本クラスの両方を持つことができます。
class B { /* ... */ };
class X : virtual public B { /* ... */ };
class Y : virtual public B { /* ... */ };
class Z : public B { /* ... */ };
class AA : public X, public Y, public Z { /* ... */ };
クラス のオブジェクトの場合、のクラス ラティス内AA
の基本クラスのすべての仮想オカレンスは、タイプ のオブジェクト内の単一のサブオブジェクトB
に対応し、 のクラス ラティス内の(非仮想) 基本クラスの他のすべてのオカレンスは、 1 対 1に対応します。 -typeのオブジェクト内に別個のサブオブジェクトを持つもの。上記で定義されたクラスが与えられると、以下に示すように、 class には class の 2つのサブオブジェクトと、およびによって共有される仮想オブジェクトがあります。AA
B
AA
B
AA
B
AA
AA
AA
B
Z
B
B
X
Y
