C++なら俺に聞け(入門篇)
■ このスレッドは過去ログ倉庫に格納されています
0374デフォルトの名無しさん
2007/01/08(月) 00:27:44{
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ではいずれも使用できない。
■ このスレッドは過去ログ倉庫に格納されています