読み方 : たじゅうていぎ
多重定義【overload】
多重定義とは?

例えば、与えられた引数を表示する関数を作りたいとき、多重定義がなければ「print_int」「print_str」のように型ごとに別の名前を付けて別の関数として定義しなければならず、同じ機能の関数が型の数だけ増えていくことになってしまう。
多重定義の仕組みを使えば、数値を表示する関数と文字列を表示する関数を、どちらも「print」という同じ名前で定義しておくことができる。呼び出し側は引数に数値を渡すか文字列を渡すかを選ぶだけでよく、どちらが実行されるかを明示的に指定する必要はない。
多重定義はC++言語やJava、C#などの静的型付け言語で広く採用されている。これらの言語ではコンパイル時に引数の型が確定しているため、どの定義を呼び出すかをコンパイル段階で決定できる。この仕組みを「静的ディスパッチ」と呼ぶ。一方、戻り値の型だけが異なる定義は呼び出し方によって区別できないため、通常は認められない。
多重定義の考え方は演算子に対しても適用される。「+」演算子が整数同士の加算だけでなく文字列の連結にも使われるのはその典型例であり、言語によっては開発者が自作のクラスに対して演算子の動作を定義することも可能である。これにより、組み込み型と近い感覚で独自のデータ型を扱えるようになる。
混同されやすい概念に「オーバーライド」(override:上書き)と「ポリモーフィズム」(polymorphism:多態性)がある。オーバーライドは親クラスの処理を子クラスで再定義する手法であり、型ごとに自動で処理を使い分ける多重定義とは異なる。ポリモーフィズムは、子孫クラスが共通の親クラスと同じメソッドを備え、それぞれに特化した振る舞いを実装できる仕組みであり、やはり多重定義とは異なる。