C++:関数のオーバーロード(多重定義)と関数テンプレート

関数のオーバーロード(多重定義)とC++の機能である関数テンプレートについてメモ。

関数のオーバーロード

関数のオーバーロードとは

引数の型や引数の数が違うもの同士であれば、同じ関数名で定義することが出来る仕組み。

関数のオーバーロードのコードサンプル

2つのint型の引数から最大値を求める関数 max() と、2つのdouble型の引数から最大値を求める関数 max() は関数名は同じだが引数の型が異なるためオーバーロード(多重定義)出来る。

#include <iostream>
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;
}

事前に複数の処理をオーバーロードしておくことで、1つの関数名を覚えておけば引数の型や個数に応じた処理が行われる。

関数テンプレート

関数テンプレートとは

関数のひな形(テンプレート)を定義できる機能。関数内の処理手続きは同じである必要があるため、扱う型が異なる場合に使用することができる。

関数テンプレートの定義

template <class X>
X maxt(X x, X y)
{
    if( x > y )
        return x;
    else
        return y;
}

関数テンプレートのコードサンプル

#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++での関数のオーバーロードと関数テンプレートは非常に相性のいい機能の組み合わせですが、オーバーロードは処理手続きが異なっても問題ないのに対し、テンプレートは処理手続きは同じである必要があるのに注意。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents