Level 3:関数 3.6 関数名の多重定義 |
※資料は自著より引用
■3.6 関数名の多重定義
C++では,同じ名前の関数でも,引数構成の異なる複数のバージョンを定義できる。
これを,
関数オーバロード(function overload)という。基本的には,Javaのメソッドオーバロードと同じ
考え方である。
●関数の汎用性と型
関数の汎用性を高める典型例として,特定のアルゴリズムを複数の型を同じ様に処理できるようにする,
という考え方がある。たとえば,関数mySortでint型配列だけでなく,double型配列も整列できればいいな,
というアイディアである。
●関数名の多重定義の仕方
関数オーバロードで,この問題を解決したのが List 3-20 である。要するに,double型配列を整列する
もうひとつの mySort関数を追加で定義したのである。
●関数の多重定義の仕組み
複数の定義が行われた関数は,呼ばれたときの実引数の構成によって適切なバージョンが自動で選択されて
実行される。List 3-20の場合,
・ 63行目,71行目のmySort関数呼び出しでは,いずれも第1実引数にint型配列を指定しているので,10〜28行目で宣言・定義されている関数mySortが呼び出される。
・ 64行目,72行目のmySort関数呼び出しでは,いずれも第1実引数にdouble型配列を指定しているので,31〜49行目で宣言・定義されている関数mySortが呼び出される。
となっている。
●多重定義とデフォルト実引数
ときに,デフォルト実引数が指定されている関数と,オーバロードされた同名関数の別定義が,同じ引数構成で
呼び出し可能なあいまいな状況が発生することがある。このような場合はエラーとなるので,関数定義の際は注意
すること,