Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ 多重継承 | イントロダクション
C++ OOP原則

book多重継承

メニューを表示するにはスワイプしてください

多重継承は、派生クラスが複数の基底クラスから継承できる仕組み。これにより、1つの派生クラスが複数の基底クラスのメンバー(データや関数)にアクセスでき、それぞれの属性や動作を組み合わせることが可能。

水平多重継承

この種類の多重継承では、クラスが継承階層の同じレベルにある複数のスーパークラスからプロパティやメソッドを継承する。たとえば、classes: ShapeColor は、それぞれ異なるプロパティやメソッドを持つ。Shapeオブジェクトの形状を定義し、Color はその色を定義する。

Shape.h

Shape.h

Color.h

Color.h

copy
1234567
class Shape { public: void setShape(const std::string& value) { shape = value; } std::string getShape() { return shape; } private: std::string shape; };

ここでは、ColoredShape クラスと Shape クラスの両方からプロパティとメソッドを継承する サブクラス Color を作成します。

ColoredShape.h

ColoredShape.h

copy
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 VehicleCarTruck などの継承の基礎となります。この例では、Car を用いてこの概念を説明します。

Vehicle.h

Vehicle.h

Car.h

Car.h

copy
12345
class Vehicle { public: void start() { std::cout << "Vehicle started"; } void stop() { std::cout << "Vehicle stopped"; } };

垂直継承を実現するには、あるclassが別のクラスから継承し、その後さらに別のクラスが最初のクラスから継承するという階層構造を設定する必要があります。ElectricCarからすべてのプロパティと機能を継承し、Car自体がCarから継承するVehicleを作成することで、複雑な多重継承構造を構築できます。

ElectricCar.h

ElectricCar.h

copy
123456
#include "Car.h" class ElectricCar : public Car { public: void charge() { std::cout << "Electric car is charging"; } };

なぜ多重継承が必要なのか

多重継承は、classが複数の親classの振る舞いや特性を持つ必要がある場合に、柔軟性とコード再利用を提供します。多重継承が有用となるシナリオは以下の通りです。

  • 現実世界の役割:飛ぶ鳥は、FlyingクラスとBirdクラスの両方の特徴を組み合わせることで、両方の能力を表現できます。Flyingクラスは飛行機や他の飛行物体にも適用可能です。

  • コード再利用:多重継承により、クラスは異なる基底クラスから機能を重複せずに再利用できます。

  • 特化したインターフェース:大きくて汎用的なインターフェースを使う代わりに、小さくて特定のインターフェースを組み合わせることを推奨します。

Note
ノート

複雑なオブジェクトをより単純なものに分割し、多重継承を活用して柔軟で保守性の高いソフトウェアを構築。

question mark

次のうち、水平継承に関する正しい記述はどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  9

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  9
some-alt