1

私は、純粋仮想関数と仮想(非純粋)デストラクタのみを定義する多くの抽象クラスを使用しています。

仮想継承を使用せずにダイヤモンド継承構造を使用しても問題ありませんか?(一部のプログラマーが仮想継承を使用する必要があることを知らなくても、問題がないことを確認したいと思います。)このトピックの短いが完全な概要を提供する優れたリソースは何ですか?

ありがとう!

4

3 に答える 3

6

できません。仮想継承がなければ、継承グラフは単なるひし形ではありません。Derivedとを継承しLeftRight両方が非仮想的にから派生する場合、オブジェクトごとBaseに2つのサブオブジェクトが存在します。BaseDerived

于 2011-01-14T08:43:21.020 に答える
5

仮想継承は、ダイアモンドを取得するメカニズムです。仮想継承を使用しない場合は、共通の基本クラスの2つの異なるコピーが作成されます。これは、実際にはダイアモンドではなく、おそらく必要なものではありません。

于 2011-01-14T08:44:09.027 に答える
2

このFAQは、例を使用して多重継承に対する適切な回答を提供します。

ダイヤモンドの場合、仮想継承が必要です。

于 2011-01-14T09:08:53.007 に答える