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が呼び出される。
となっている。

●多重定義とデフォルト実引数

 ときに,デフォルト実引数が指定されている関数と,オーバロードされた同名関数の別定義が,同じ引数構成で
呼び出し可能なあいまいな状況が発生することがある。このような場合はエラーとなるので,関数定義の際は注意
すること,



次へ進む。