class Base
{
public:
int n;
};
//仮想継承
class D1 : public virtual Base { /* 〜 */ };
class D2 : public virtual Base { /* 〜 */ };

class Derivation : public D1, public D2 { /* 〜 */ };

この例のような状態は特に菱形継承(ダイアモンド継承)と呼ばれる。

仮想継承でない(D1, D2の部分のvirtualを取り除く)場合、DerivationのインスタンスにはD1の基底のBaseのnとD2の基底のBaseのnという2つのnが別に存在することになる
(メンバ関数も同様)。仮想継承した場合、 DerivationのインスタンスにはBaseの部分はただ1つしか存在しない。D1の基底とD2の基底が共有されている状態である。

C++ではクラスの多重継承・仮想継承が共に使用できる。しかしC++を基にしているJava、C#、Dではいずれも使用できない。