ショートカット
ファシリテーター × あり方
コーディングの向こう側
Hello, ANOTHER world!
オブジェクト指向のはなし
プログラミングのはなし
C言語実力診断クイズ
eSkillBooks
オブジェクト指向のはなし

同じ名前の関数が使えてイイ

用語
このトピックでは次の用語を覚えます:
  • オーバーロード (overloading)
解説

例えば、プリンタに文字列を出力する関数と数値を出力する関数を C で作るとしたら、だいたい次のような感じになりますね。

SAMPLE
CODE
C の場合:
void PrintString( const char *pc )
{
    ...
}

void PrintInteger( int n )
{
    ...
}

C を使う場合は、別の関数は当然別の名前になりますね。2つの関数が同じ目的に使われる場合でも、とにかく厳密に違う名前にしなければだめです。

これと同じことを C++ でやる場合は、だいたい次のようになります。

SAMPLE
CODE
C++ の場合:
void Print( const char *pc )
{
    ...
}

void Print( int n )
{
    ...
}

2つとも同じ名前の関数にできます。こういうのをオーバーロードと言います。同じことをする関数なんだから、同じ名前で当然というわけです。こうすれば、文字列を出力するときと数値を出力するときで違う関数を呼びわける必要がないので、なんだかお気楽です。

正確に言うと、

異なるパラメータリストで同じ名前の関数を作ること

をオーバーロードと言います。パラメータの個数が違うオーバーロードもありです。パラメータの型が同じで戻り値の型だけ違うオーバーロードはできません。

SAMPLE
CODE
だめな例(戻り値の型だけではオーバーロードできない):
void SomeFunc( const char *pc )
{
    ...
}

bool SomeFunc( const char *pc )
{
    ...
}

(「オブジェクト指向のはなし」は1999年2月から2000年4月にかけて作成されたコンテンツです。)