第4章 関数のオーバーロード


C++では、関数のオーバーロードということができます。 これは、何かというと引数の個数とか、種類?が異なれば 同じ関数名を付けてよいということです。 これって、便利なこともあれば バグ探しの時ひどい目にもあいます。 使い方は、簡単です。関数のかっこ内のリストが異なる 同名の関数を作ればよいだけです。では、例題を示しましょう。

ずいぶん縦長になってしまいました。関数プロトタイプ宣言の所を見てください。 全部show()になっています。しかしかっこ内の引数リストはすべて違いますね。 これで、どの関数が呼ばれたかが区別できるのです。

あー、それと関数プロトタイプは必ず記述してください。

C++ではこれが大事です。プロトタイプ宣言していないと エラーになります。これが面倒くさい方は、main関数を最後に書く という手もあります。

あれ、第3章でやったデフォルト引数は どうなるの?

そうです。引数を省略した場合どの関数が呼ばれたのか 区別が付かなくなることがあります。 このへんは、プログラムを書くときに十分気を付けてください。

全部違うshow関数で呼ばれています。 うまく使えば、非常に便利ですがやたらに使うと 後で困ったことが起こる可能性もあります。 何事もほどほどがいいようです。(中庸)

では、もう少しサンプルプログラムを作ってみましょう。

#include <stdio.h> void print() { printf("引数はありません\n"); return; } void print(int x) { printf("int型の引数%dです。\n", x); return; } void print(int a, char *b) { printf("引数は%dと「%s」です。\n", a, b); return ; } int main(void) { int a = 10; char *str = "粂井康孝"; print(); print(a); print(a, str); return 0; }

今度は、自作関数をmain関数より先に書きました。 こうすると、プロトタイプ宣言の手間が省けます。 また、coutを使わずprintf関数を使用してみました。 もちろん上のプログラムをCで処理することはできません。 (Cには関数のオーバーロードは認められていない。)

結果は、左の通りです。特別難しいことはないですね。 ただ、これをどのように効果的に使うのかが もっとも難しい ですね。


[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Jan/05/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。