C++の基礎 : 関数のオーバーロード
関数のオーバーロード
C 言語では、同じ関数名をもつ複数の関数を定義することはできませんでした。たとえば、次のような 2 つの関数を定義するとエラーになります。
SIntN Plus(SIntN x, SIntN y) { return x + y; } SIntN Plus(SIntN x, SIntN y, SIntN z) { return x + y + z; }
しかし C++ 言語では、このように引数が異なる同名の関数を複数定義することができます。メンバ関数でも同様です。
このように、引数が異なる同名の関数を複数定義することを、関数のオーバーロードといいます。
関数のオーバーロードは引数の型が異なるだけでも可能です。
SIntN Plus(SIntN x, SIntN y) { return x + y; } AChar Plus(AChar x, AChar y) { return x + y; }
しかし、戻り値の型が異なるだけのオーバーロードはできません。コンパイル時にエラーとなります。
SIntN Plus(SIntN x, SIntN y) { return x + y; } AChar Plus(SIntN x, SIntN y) // コンパイル エラー { return x + y; }
【Java では】Java にも C++ と同様のオーバーロード機能があります。
この章のまとめ
- C++ 言語では、引数の個数や型が異なる同名の関数を複数定義することができます。
- C++ 言語では、戻り値の型だけが異なる同名の関数を複数定義することはできません。
やってみよう
次のようなコードを実行してみましょう! ちゃんとコンパイルが成功するでしょうか?
戻り値だけが異なる同名関数を定義するとどのようなエラーになるか確かめましょう。
Void TestOverload(Void) { SFXHelper::dbgprintf("1+2 = %d", Plus(1, 2)); SFXHelper::dbgprintf("1+2+3 = %d", Plus(1, 2, 3)); }