多重継承
メニューを表示するにはスワイプしてください
多重継承は、派生クラスが複数の基底クラスから継承できる仕組み。これにより、1つの派生クラスが複数の基底クラスのメンバー(データや関数)にアクセスでき、それぞれの属性や動作を組み合わせることが可能。
水平多重継承
この種類の多重継承では、クラスが継承階層の同じレベルにある複数のスーパークラスからプロパティやメソッドを継承する。たとえば、classes: Shape と Color は、それぞれ異なるプロパティやメソッドを持つ。Shape はオブジェクトの形状を定義し、Color はその色を定義する。
Shape.h
Color.h
1234567class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };
ここでは、ColoredShape クラスと Shape クラスの両方からプロパティとメソッドを継承する サブクラス Color を作成します。
ColoredShape.h
123456789#include "Shape.h" #include "Color.h" class ColoredShape : public Shape, public Color { public: void describe() { std::cout << "This object is a " << getShape() << " shape and is " << getColor() << '\n'; } };
垂直継承
深さ継承では、class が直接の親およびその祖先からプロパティとメソッドを継承し、継承チェーンを形成します。例えば、class Vehicle は Car や Truck などの継承の基礎となります。この例では、Car を用いてこの概念を説明します。
Vehicle.h
Car.h
12345class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };
垂直継承を実現するには、あるclassが別のクラスから継承し、その後さらに別のクラスが最初のクラスから継承するという階層構造を設定する必要があります。ElectricCarからすべてのプロパティと機能を継承し、Car自体がCarから継承するVehicleを作成することで、複雑な多重継承構造を構築できます。
ElectricCar.h
123456#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };
なぜ多重継承が必要なのか
多重継承は、classが複数の親classの振る舞いや特性を持つ必要がある場合に、柔軟性とコード再利用を提供します。多重継承が有用となるシナリオは以下の通りです。
-
現実世界の役割:飛ぶ鳥は、
FlyingクラスとBirdクラスの両方の特徴を組み合わせることで、両方の能力を表現できます。Flyingクラスは飛行機や他の飛行物体にも適用可能です。 -
コード再利用:多重継承により、クラスは異なる基底クラスから機能を重複せずに再利用できます。
-
特化したインターフェース:大きくて汎用的なインターフェースを使う代わりに、小さくて特定のインターフェースを組み合わせることを推奨します。
複雑なオブジェクトをより単純なものに分割し、多重継承を活用して柔軟で保守性の高いソフトウェアを構築。
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください