函数重载
重载的思想很简单:编译器允许你用同一名字定义多个函数或过程,只要它们所带的参数不同。实际上,编译器是通过检测参数来确定需要调用的例程。
下面是从VCL 的数学单元(Math Unit)中摘录的一系列函数:
返回值也是个整数。
声明重载函数有两条原则:
· 每个例程声明后面必须添加overload 关键字。
· 例程间的参数个数或(和)参数类型必须不同,返回值不能用于区分各例程。
41
下面是ShowMsg 过程的三个重载过程。我已把它们添加到例OverDef 中(一个说明重
载和确省参数的应用程序):
三个过程分别用三种不同的方法格式化字符串,然后在信息框中显示字符串。下面是三个例程的调用:
当你在例程名后面键入左圆括号时,窗口中会显示所有可用
重载的思想很简单:编译器允许你用同一名字定义多个函数或过程,只要它们所带的参数不同。实际上,编译器是通过检测参数来确定需要调用的例程。
下面是从VCL 的数学单元(Math Unit)中摘录的一系列函数:
function Min (A,B: Integer): Integer; overload;
function Min (A,B: Int64): Int64; overload;
function Min (A,B: Single): Single; overload;
function Min (A,B: Double): Double; overload;
function Min (A,B: Extended): Extended; overload;
当调用方式为Min (10, 20)时,编译器很容易就能判定你调用的是上列第一个函数,因此
返回值也是个整数。
声明重载函数有两条原则:
· 每个例程声明后面必须添加overload 关键字。
· 例程间的参数个数或(和)参数类型必须不同,返回值不能用于区分各例程。
41
下面是ShowMsg 过程的三个重载过程。我已把它们添加到例OverDef 中(一个说明重
载和确省参数的应用程序):
procedure ShowMsg (str: string); overload;
begin
MessageDlg (str, mtInformation, [mbOK], 0);
end;
procedure ShowMsg (FormatStr: string;
Params: array of const); overload;
begin
MessageDlg (Format (FormatStr, Params),
mtInformation, [mbOK], 0);
end;
procedure ShowMsg (I: Integer; Str: string); overload;
begin
ShowMsg (IntToStr (I) + ' ' + Str);
end;
三个过程分别用三种不同的方法格式化字符串,然后在信息框中显示字符串。下面是三个例程的调用:
ShowMsg ('Hello');
ShowMsg ('Total = %d.', [100]);
ShowMsg (10, 'MBytes');
当你在例程名后面键入左圆括号时,窗口中会显示所有可用