関数のオーバーロード(多重定義)とC++の機能である関数テンプレートについてメモ。
関数のオーバーロード
関数のオーバーロードとは
引数の型や引数の数が違うもの同士であれば、同じ関数名で定義することが出来る仕組み。
関数のオーバーロードのコードサンプル
2つのint型の引数から最大値を求める関数 max() と、2つのdouble型の引数から最大値を求める関数 max() は関数名は同じだが引数の型が異なるためオーバーロード(多重定義)出来る。
[code]
#include
using namespace std;
//プロトタイプ宣言
int max(int x, int y);
double max(double x, double y);
int main(int argc, const char * argv[])
{
int a, b;
double da, db;
cout << "2つの整数を入力 \n"; cin >> a >> b;
cout << "2つの小数を入力 \n"; cin >> da >> db;
int result1 = max(a, b);
double result2 = max(da, db);
cout << "入力した整数の最大値: " << result1 << "\n";
cout << "入力した小数の最大値: " << result2 << "\n";
return 0;
}
// max関数(int型)
int max(int x, int y)
{
if ( x > y )
return x;
else
return y;
}
// max関数(double型)
double max(double x, double y)
{
if ( x > y )
return x;
else
return y;
}
[/code]
事前に複数の処理をオーバーロードしておくことで、1つの関数名を覚えておけば引数の型や個数に応じた処理が行われる。
関数テンプレート
関数テンプレートとは
関数のひな形(テンプレート)を定義できる機能。関数内の処理手続きは同じである必要があるため、扱う型が異なる場合に使用することができる。
関数テンプレートの定義
[code]
template
X maxt(X x, X y)
{
if( x > y )
return x;
else
return y;
}
[/code]
関数テンプレートのコードサンプル
[code]
#include
using namespace std;
//テンプレートの定義
template
X maxt(X x, X y)
{
if ( x > y )
return x;
else
return y;
}
int main(int argc, const char * argv[])
{
int a, b;
double da, db;
cout << "2つの整数を入力 \n"; cin >> a >> b;
cout << "2つの小数を入力 \n"; cin >> da >> db;
int result1 = maxt(a, b);
double result2 = maxt(da, db);
cout << "入力した整数の最大値: " << result1 << "\n"; cout << "入力した小数の最大値: " << result2 << "\n"; return 0; } [/code]
関数のオーバーロードのサンプルコードを関数テンプレートを定義し書き換えると、コードが簡略化され見やすくなる。
まとめ
C++での関数のオーバーロードと関数テンプレートは非常に相性のいい機能の組み合わせですが、オーバーロードは処理手続きが異なっても問題ないのに対し、テンプレートは処理手続きは同じである必要があるのに注意。