多重継承はしばしばused in C++ではありません。ほとんどの場合、それはインターフェイス/実装のミックスインです。それも禁止されていません。 (仮想)多重継承の必要性がある一般的な基本クラスから派生するために、設計上の決定から来ている:
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 ... */ };
これらのダイヤモンド型の継承グラフは、ライブラリの実装によって予見されなければなりません。 virtual
が存在しない場合は、2つのベースWindow
オブジェクトがあります。virtual
は1つのみですが、シングルトンではないため、多くのウィンドウが存在する可能性があります。
ライブラリは多くの場合(すべての場合ではなく)avoidです。 composite design patternを実装することによって、「ファット」基本クラスを持つこと、抽象的なインターフェイスクラスを実装すること、または特質/ポリシー付きテンプレートを使用することによって実現できます。
Bjarne StroustrupのThe C++ Programming language(私の第3版の第15章、この例を借りたもの)のクラス階層の章を読むことをお勧めします。
C++プログラミングについて何をお読みになりましたか?多重継承または仮想継承は扱いにくいので、避けるべきです。そして問題は、BとCの両方から継承するクラスDのためです。 –
今私はそれを勉強しています、私は基本的な紹介しかありませんでした。私は間違いなく誰かがあなたがどちらかを使用する理由についての簡単な例を与えることができれば、より良くなるだろう。私は複雑な/境界線の場合は必要ありません。単純な基本的なシナリオは、1つの文で完璧なものになります。 – Bober02
私はめったに多重継承または仮想継承を使用する必要はありません。良いルールは決してそれを使用しないことです。 –