1つの親クラスがインターフェイス(仮想デストラクタを備えた純粋仮想関数のみを含む)である場合、多重継承を使用しても大丈夫ですか?
コンパイル速度を上げるために、インターフェイス部分(図の黄色のクラス)のみを公開したいと思います。緑の部分は実装部分です。しかし、CPetはCAnimal(is-a Relation)とIPet(implement)から継承する必要があり、「DiamondofDeath」があります:(
インターフェイスクラス(黄色)には純粋仮想関数と仮想破壊しかありません。したがって、ファクトリクラスを介してCDog、CCatを作成する場合、あいまいさなどの問題はありません。CDogには2つのvtable(IDogとCPetから)がありますが、仮想関数テーブルでは、ポイントは同じ関数(CDogメンバー関数)を示します。
コンパイルエラーも実行エラーもありません...しかし、私はこの階層について心配しています。大丈夫ですか、それとも問題ありませんか?
PS:「仮想継承」を使用したくないのは、それを使用すると、ウォッチビューからクラスメンバー変数を調べることができないためです(仮想継承がlinked-listのように親クラスにリンクしているためだと思います)。
環境:Visual Studio C++2008以降。