C++ オーバーライドのサンプル

C++のオーバーライドのサンプルです。

目次

オーバーライド

  • クラスを継承したときに使用できます。
  • 親クラスで定義したメソッド(メンバ関数)を、子クラスで同じメソッド名(メンバ関数名)を記述して処理内容を上書きすることです。
  • 親クラスのメソッドにvirtualキーワードをつけます。
  • オーバーライドするメソッドは、メソッド名、引数、戻り値の型が同じである必要があります。
  • 似た名前として、オーバーロードがありますがそれとは別物です。

コード

オーバーライドのサンプルです。

#include <iostream>
using namespace std;

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

5~9行目は親クラスです。
8行目は、メソッドの前にvirtualがついています。
10~14行目は子クラスです。
16,21行目は同じメソッド名(メンバ関数名)です。
28行目は、子クラスのインスタンスを生成しています。
29行目は、子クラスのメソッドが実行されます。

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

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

#include <iostream>
using namespace std;

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

5~9行目は親クラスです。
8行目は、メソッドの前にvirtualがついています。
10~14行目は子クラスです。
16,21行目は同じメソッド名(メンバ関数名)です。
23行目は、「クラス名::メソッド名」で親クラスのメソッドを呼んでいます。
29行目は、子クラスのメソッドを実行し23行目で親クラスのメソッドが実行されます。

関連の記事

C++ クラスの仕組みと使い方のサンプル
C++ クラスのコンストラクタのサンプル
C++ クラスの継承の仕組みとサンプル

△上に戻る