オーバーロードは、名前の同じ関数や手続きの存在が許可されることを言います。例を見て見ましょう。
function MyFunc(i, j: Integer): Integer; overload;
begin
ShowMessage('1番です');
Result := i + j;
end;
function MyFunc(i: Integer; j: Double): Double; overload;
begin
ShowMessage('2番です');
Result := i + j;
end;
function MyFunc(i: Double; j: Integer): Double; overload;
begin
ShowMessage('3番です');
Result := i + j;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
d: Double;
begin
i := MyFunc(10, 10);
ShowMessage(IntToStr(i));
d := MyFunc(2, 3.3);
ShowMessage(FloatToStr(d));
d := MyFunc(4.2, 3);
ShowMessage(FloatToStr(d));
end;
関数の後ろに overload を付けてやればオーバーロードすることが出来ます。それぞれをどのように判断しているのかというと、それは引数で判断されています。 引数の数、型で違いを付けてやればコンパイラはどの関数、手続きを使えばよいのかを判断できます。
また、オーバーロード関数でデフォルト引数を使用すると、あいまいさが生じることがあります。
function MyFunc(i: Integer): Integer; overload; begin Result := i * i; end; function MyFunc(i: Integer; j: Integer = 0): Integer; overload; begin Result := i * j; end; procedure TForm1.Button1Click(Sender: TObject); begin MyFunc(2, 3); MyFunc(5); // あいまい end;