多重継承 | Programming Place Plus 用語集

トップページ用語集

名称

解説

オブジェクト指向プログラミングにおける継承のうち、元になるクラススーパークラス)が複数ある場合を指します。

多重継承に対して、スーパークラスが1つだけの継承を単一継承(特に区別する必要がない場面では、単に継承)と呼びます。

多重継承では、異なる2つ以上のスーパークラスが、それらの共通の祖先(さらに上位に来るスーパークラス)を持つような複雑な継承構造を生み出してしまうことがあり、祖先のメンバを重複して引き継いでしまったり、メンバの名前が衝突したりするなど、活用に難があります。こういった難しさがあることから、多重継承が行えないプログラミング言語も多く、代わりの方法としてインターフェースmixin といった方法を用いることがあります。多重継承を行えるプログラミング言語に C++ があります。

C++ の場合

C++ は多重継承が可能です。

共通の基底クラスを持つ2つ以上のクラスから派生させると、同一の祖先を別個のものとして扱ってしまうことになります。次のソースコードでは、クラスB1 と B2 は共通の基底クラス A から派生しています。B1 と B2 を多重継承した C は A のメンバをそれぞれから1つずつ継承したことになります。

class A { public a; };
class B1 : public A {};
class B2 : public A {};
class C : public B1, public B2 {};

このため、クラスC のオブジェクトco があるとして、co.a は曖昧であるということになり(B1 に引き継がれた a なのか、B2 に引き継がれた a なのか判断できない)、コンパイルエラーを起こします。

C++ は、この問題を解決する手段として、仮想継承という機能を備えています。

C++ の多重継承や仮想継承については、C++編【言語解説】第30章を参照してください。


参考リンク

更新履歴


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る