多重継承は、C++ ではあまり使用されません。ほとんどの場合、インターフェース/実装のミックスインです。それも禁止ではありません。(仮想) 多重継承の必要性は、1 つの一般的な基本クラスから派生するという設計上の決定から生じます。
class Window
{ /* draw, show, hide, background ... */ };
class WindowWithBorder : public virtual Window
{ /* methods to manipulate / draw border ... */ };
class WindowWithMenu : public virtual Window
{ /* methods to manipulate / draw Menu ... */ };
class MyWindow : public WindowWithBorder, public WindowWithMenu
{ /* now it's your turn ... */ };
これらのひし形の継承グラフは、ライブラリの実装者が予測する必要があります。多くのウィンドウが存在する可能性があるため、シングルトンではなく、1 つだけのvirtual
ベースWindow
オブジェクトが 2 つ存在することになります。virtual
ライブラリは、多くの場合 (すべての場合ではありません) 、そのような状況を回避できます。たとえば、複合設計パターンを実装する、「太い」基本クラスを持つ、抽象インターフェイス クラスを実装する、または特性/ポリシーを備えたテンプレートを使用することによってです。
Bjarne Stroustrup のThe C++ Programming languageのクラス階層に関する章を読むことをお勧めします(私の第 3 版の第 15 章、例を借りました)。