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

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

目次

サンプル クラスの継承とは
クラスの継承のサンプル
  多重継承のサンプル
  子クラスから親クラスのインスタンスを参照する

クラスの継承とは

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

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

継承は、オブジェクト指向の3大要素の一つです。(他はカプセル化とポリモーフィズム)

 

クラスの継承のサンプル

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

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

#include <iostream>
using namespace std;

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

5行目は、親クラス「Color1」を定義しています。
10行目は、子クラス「Color2」を定義しています。
「class Color2」の後に「 : public Colo1」と記述することにより、Color2は、Color1を継承します。

28行目は、子クラス「Color2」のオブジェクトを生成しています。
(Color2型のc2というオブジェクトを生成)
29行目のgetName1メソッドは子クラスに存在しませんが実行できます。親クラスのメソッドを実行します。
→子クラスは、親クラスのメソッドを再実装しないで済んでいます。継承の利点です。

 

多重継承のサンプル

C++では多重継承が可能です。

#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 << "RED\n";
	return;
}
void Color2::getName2()
{
	cout << "BLUE\n";
	return;
}
void Color3::getName3()
{
	cout << "WHITE\n";
	return;
}
//クラスを使用
int main() {
	Color3 c3;
	c3.getName1(); //RED
	c3.getName2(); //BLUE
	c3.getName3(); //WHITE
	return 0;
}

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

 

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

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

#include <iostream>
using namespace std;

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

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

関連の記事

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

△上に戻る