C++ クラスの継承の仕組みとサンプル

C++のクラスの継承の仕組みとサンプルです。

目次

クラスの継承のイメージ

クラスがクラスを継承すると、継承先のクラスは継承元のクラスの機能を引き継ぎます。
継承先のクラスは、差分の機能を追加するだけでよくなります。

継承元のクラスのことを「基底クラス 」or 「親クラス 」or 「スーパークラス」といいます。
継承先のクラスのことを「派生クラス」 or「 子クラス」 or「 サブクラス」といいます。

 

継承

class  クラス名  :   継承元のクラス名{
}
  • 継承するクラスは、クラス名の後に、コロン(:)と継承元のクラスを記述します。
  • 継承元のクラス(親クラス)は、複数指定できます。多重継承が可能です。

コード

クラスの継承のサンプルです。

#include <iostream>
using namespace std;

//クラスを定義
class Color1
{
public:
	void getName1();
};
class Color2 : public Color1
{
public:
	void getName2();
};
//メンバ関数の実装
void Color1::getName1()
{
	cout << "赤です\n";
	return;
}
void Color2::getName2()
{
	cout << "青です\n";
	return;
}
//クラスを使用
int main() {
	Color2 cla2;
	cla2.getName1(); //赤です
	cla2.getName2(); //青です
	return 0;
}

5行目は、親クラス「Class1」を定義しています。
10行目は、子クラス「Class2」を定義しています。
「class Class2」の後に「 : public Class1」と記述することにより、Class2は、Class1を継承します。
16~20行目は、クラス「Class1」のメンバ関数です。8行目のgetName1メソッドの内容を記述しています。
21~25行目は、クラス「Class2」のメンバ関数です。13行目のgetName2メソッドの内容を記述しています。
28行目は、子クラス「Class2」のオブジェクトを生成しています。
(Class2型のcla2というオブジェクトを生成)
29行目のgetName1メソッドは子クラスに存在しませんが実行できます。親クラスのメソッドを実行します。
→子クラスは、親クラスのメソッドを再実装しないで済んでいます。継承の利点です。

多重継承のサンプル

多重継承のサンプルです。

#include <iostream>
using namespace std;

//クラスを定義
class Color1
{
public:
	void getName1();
};
class Color2
{
public:
	void getName2();
};
class Color3 : public Color1, public Color2
{
public:
	void getName3();
};
//メンバ関数の実装
void Color1::getName1()
{
	cout << "赤です\n";
	return;
}
void Color2::getName2()
{
	cout << "青です\n";
	return;
}
void Color3::getName3()
{
	cout << "白です\n";
	return;
}
//クラスを使用
int main() {
	Color3 cla3;
	cla3.getName1(); //赤です
	cla3.getName2(); //青です
	cla3.getName3(); //白です
	return 0;
}

15行目のクラスは、5行目と10行目のクラスを継承しています。多重継承です。
C++では多重継承が可能です。
38行目は、子クラス「Class3」のオブジェクトを生成しています。
(Color3型のcla3というオブジェクトを生成)
39,40行目は、継承元(親)のクラスのメソッドを実行しています。

子クラスから親クラスのインスタンスを参照する

子クラスから親クラスのインスタンスを参照するサンプルです。

#include <iostream>
using namespace std;

//クラスを定義
class Color1
{
public:
	void getName1();
};
class Color2 : public Color1
{
public:
	void getName2();
};
//メンバ関数の実装
void Color1::getName1()
{
	cout << "赤です\n";
	return;
}
void Color2::getName2()
{
	Color1::getName1();
	return;
}
//クラスを使用
int main() {
	Color2 cla2;
	cla2.getName1(); //赤です
	cla2.getName2(); //赤です
	return 0;
}

10行目のクラスは、5行目のクラスを継承しています。
23行目は、「クラス名::メソッド名」で親クラスのメソッドを呼んでいます。
30行目は、子クラスのメソッドを実行し23行目で親クラスのメソッドが実行されます。

関連の記事

C++入門 クラスの仕組みとサンプル
C++ クラスのコンストラクタのサンプル

△上に戻る