【C++】マルチレベル継承(多段継承)の基本と実装例をわかりやすく解説
マルチレベル継承とは
マルチレベル継承(多段継承)とは、あるクラスが別のクラスから派生し、さらにその派生クラスから新たなクラスが派生するといった、親子関係が段階的に連なる継承の形態です。C++では「class 派生クラス名 : public 基底クラス名」という構文で実現でき、最下層の派生クラスは、直接の基底クラスだけでなく、その上位にあるすべての基底クラスのpublicメンバーを利用することができます。
プログラムの概要
ここでは、Vehicle(乗り物)、FourWheeler(四輪車)、Car(車)という3つのクラスを例に考えます。Vehicleクラスが基底クラスであり、FourWheelerクラスはVehicleクラスから派生し、さらにCarクラスはFourWheelerクラスから派生しています。
各クラスには次のメソッドが定義されています。
- Vehicleクラス:「I am a vehicle」と出力するvehicle()メソッド
- FourWheelerクラス:「I have four wheels」と出力するfourWheeler()メソッド
- Carクラス:「I am a car」と出力するcar()メソッド
この構造はマルチレベル継承であるため、最下層にあたるCarクラスのオブジェクトから、継承チェーン上にあるすべてのクラスのメソッドにアクセス可能です。そこで、Carオブジェクトから各メソッドを呼び出し、対応する出力を表示してみましょう。
car()、fourWheeler()、vehicle()の順にメソッドを呼び出すと、出力は次のようになります。
I am a car
I have four wheels
I am a vehicle
解決の手順
以下のステップに従ってプログラムを作成します。
- 新しいクラスVehicleを定義する
- 関数vehicle()を定義し、「I am a vehicle」を出力する
- Vehicleクラスを継承した新しいクラスFourWheelerを定義する
- 関数fourWheeler()を定義し、「I have four wheels」を出力する
- FourWheelerクラスを継承した新しいクラスCarを定義する
- 関数car()を定義し、「I am a car」を出力する
サンプルコード
以下の実装例を見て、より理解を深めましょう。
#include <iostream>
using namespace std;
class Vehicle{
public:
void vehicle(){
cout<<"I am a vehicle\n";
}
};
class FourWheeler : public Vehicle{
public:
void fourWheeler(){
cout<<"I have four wheels\n";
}
};
class Car : public FourWheeler{
public:
void car(){
cout<<"I am a car\n";
}
};
int main(){
Car obj;
obj.car();
obj.fourWheeler();
obj.vehicle();
return 0;
}
入力
Car obj;
obj.car();
obj.fourWheeler();
obj.vehicle();
出力
I am a car
I have four wheels
I am a vehicle
まとめ
このように、マルチレベル継承を使うことで、機能ごとに分割された複数のクラスを段階的に組み合わせ、階層的なクラス設計を行うことができます。Carクラスのオブジェクト1つで、上位クラスのvehicle()やfourWheeler()もまとめて呼び出せる点が、継承の大きなメリットといえるでしょう。
-
【C++入門】多重継承の基本と実装方法をわかりやすく解説
多重継承(Multiple Inheritance)とは多重継承とは、ひとつのクラスが複数の基底クラス(親クラス)から派生する仕組みのことです。多重継承を利用することで、派生クラスは複数の基底クラスが持つ機能やデータメンバをまとめて引き継ぐことができます。これはC++に代表されるオブジェクト指向プログラミング言語における重要な機能のひとつです。多重継承の構造を表した図が以下になります。C++で多重継承を実装するサンプルプログラムここでは、C++で多重継承を実装したサンプルプログラムを紹介します。クラスCが、クラスAとクラスBの2つのクラスを同時に継承する例です。サンプルコード#include
-
C++のローカルクラスとは?特徴・制約と実装例をわかりやすく解説
ローカルクラスとは C++において、関数の中で宣言されたクラスは「ローカルクラス」と呼ばれます。これは、そのクラスが定義された関数の内部でのみ有効であるためです。 まず、ローカルクラスの基本的な構造を見てみましょう。 #include<iostream> using namespace std; void func() { class LocalClass { }; } int main() { return 0; } 上記の例では、関数 func() の中で LocalClass が定義されています。このように関数の内部で宣言されたクラスが、ローカルクラス