オブジェクト指向プログラミングにおける継承のうち、元になるクラス(スーパークラス)が複数ある場合を指します。
多重継承に対して、スーパークラスが1つだけの継承を単一継承(特に区別する必要がない場面では、単に継承)と呼びます。
多重継承では、異なる2つ以上のスーパークラスが、それらの共通の祖先(さらに上位に来るスーパークラス)を持つような複雑な継承構造を生み出してしまうことがあり、祖先のメンバを重複して引き継いでしまったり、メンバの名前が衝突したりするなど、活用に難があります。こういった難しさがあることから、多重継承が行えないプログラミング言語も多く、代わりの方法としてインターフェースや mixin といった方法を用いることがあります。多重継承を行えるプログラミング言語に 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で書く |
RSS | 管理者情報 | プライバシーポリシー |