読み方 : たじゅうていぎ

多重定義【overload】

多重定義とは?

プログラミング言語において、同じ名前の関数やメソッド演算子を、引数の型や数の組み合わせを変えて複数定義できる仕組み。呼び出し時には、渡された引数の構成をもとにコンパイラや実行環境が自動的に適切な処理を選択する。
多重定義のイメージ画像

例えば、与えられた引数を表示する関数を作りたいとき、多重定義がなければ「print_int」「print_str」のように型ごとに別の名前を付けて別の関数として定義しなければならず、同じ機能の関数が型の数だけ増えていくことになってしまう。

多重定義の仕組みを使えば、数値を表示する関数と文字列を表示する関数を、どちらも「print」という同じ名前で定義しておくことができる。呼び出し側は引数に数値を渡すか文字列を渡すかを選ぶだけでよく、どちらが実行されるかを明示的に指定する必要はない。

多重定義はC++言語やJava、C#などの静的型付け言語で広く採用されている。これらの言語ではコンパイル時に引数の型が確定しているため、どの定義を呼び出すかをコンパイル段階で決定できる。この仕組みを「静的ディスパッチ」と呼ぶ。一方、戻り値の型だけが異なる定義は呼び出し方によって区別できないため、通常は認められない。

多重定義の考え方は演算子に対しても適用される。「+」演算子が整数同士の加算だけでなく文字列の連結にも使われるのはその典型例であり、言語によっては開発者が自作のクラスに対して演算子の動作を定義することも可能である。これにより、組み込み型と近い感覚で独自のデータ型を扱えるようになる。

混同されやすい概念に「オーバーライド」(override:上書き)と「ポリモーフィズム」(polymorphism多態性)がある。オーバーライドは親クラスの処理を子クラスで再定義する手法であり、型ごとに自動で処理を使い分ける多重定義とは異なる。ポリモーフィズムは、子孫クラスが共通の親クラスと同じメソッドを備え、それぞれに特化した振る舞いを実装できる仕組みであり、やはり多重定義とは異なる。

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。