オーバーロード
読み:オーバーロード
外語:overload

 シグネチャが異なる同名のメソッド(関数)を定義(多重定義)すること。
目次

概要
 例えば、二つの変数を加算して結果を返す関数を想定する。
 Cであれば、いかなる理由があっても同名の関数は定義できなかったため、例えばint型用の加算関数、double型用の加算関数、などを各々別名で用意する必要があった。
 C++では、同じスコープ内に同じ名前の関数を複数定義することができるようになり、型が異なる関数を同名で定義することができる。それぞれの関数の区別のために、シグネチャ、より具体的には引数が異なっている必要がある。このような機能を、C++ではオーバーロードという。

特徴

利点
 オーバーロードを用いると、同じスコープ内に同名の関数(あるいはメソッド)にすることが可能である。
 定義は、原則としてデータ型ごとに別々に行なう必要があるが、テンプレートを使うことで、定義を一回にまとめることも可能である。
 C++はデータ型に厳密であるので、引数のデータ型からコンパイルの際にどの関数を用いればいいのかが一意に定まる。このため、このようなことが可能となった。
 また、このようにして関数(メソッド)を一つにまとめることで、引数と戻り値のデータ型を抽象化することが可能となる。

用例
 例えばintとdoubleの加算関数を用意する場合、Cであれば、次のようになる。
int add_int(int i1, int i2)
{
    return i1 + i2;
}
double add_dbl(double d1, double d2)
{
    return d1 + d2;
}

void main(void)
{
    int i1 = 1, i2 = 2, ir;
    double d1 = 1.0, d2 = 2.0, dr;

    ir = add_int(i1, i2);
    dr = add_dbl(d1, d2);
}
 C++でオーバーロードを用いると、同じ関数名にすることができる。
int add(int i1, int i2)
{
    return i1 + i2;
}
double add(double d1, double d2)
{
    return d1 + d2;
}

void main()
{
    int i1 = 1, i2 = 2, ir;
    double d1 = 1.0, d2 = 2.0, dr;

    ir = add(i1, i2);
    dr = add(d1, d2);
}
 この例ではシンプルにするためにサブルーチンとして説明しているが、この機能はメソッドの定義などで威力を発揮する。

再検索