从Delphi4开始,Object Pascal可以使用具有相同函数名但又有不同参数的函数。
共享公用名称的方法就称重载方法。
我们共同来完成一个范例,我们要实现两个数的乘积,这两个数有可能是Integer、Double、Word类型,而我们只需要一个Multiply函数来实现。
1、新建一个Application。
2、在Form1上放置一个Memo组件(Memo1)和Button组件(Button1),如下所示:
3、在Code Editor中输入以下代码,并添加Button1Click事件,完整代码如下:
unit Unit1; interface uses { 此处省略部分Delphi缺省代码,以节约空间} var Form1: TForm1; { 所有需要重载的方法都需要声明,并用overload来指示} function Multiply(Num1, Num2: Integer): Integer; overload; function Multiply(Num1, Num2: Double): Double; overload; function Multiply(Num1, Num2: Word): Word; overload; implementation {$R *.dfm} { 重载方法的定义} function Multiply(Num1, Num2: Integer): Integer; begin Result := Num1 * Num2; end; function Multiply(Num1, Num2: Double): Double; begin Result := Num1 * Num2; end; function Multiply(Num1, Num2: Word): Word; begin Result := Num1 * Num2; end; procedure TForm1.Button1Click(Sender: TObject); var DNum1, DNum2: Double; INum1, INum2: Integer; WNum1, WNum2: Word; begin Memo1.Clear; { 两个Integer类型的乘法} INum1 := 2000; INum2 := 3000; Memo1.Lines.Add('Mulitiply(' + IntToStr(INum1) + ', ' + IntToStr(INum2) + ') = ' + IntToStr(Multiply(INum1, INum2))); { 两个Double类型的乘法} DNum1 := 1.1; DNum2 := 1.1; Memo1.Lines.Add('Mulitiply(' + FloatToStr(DNum1) + ', ' + FloatToStr(DNum2) + ') = ' + FloatToStr(Multiply(DNum1, DNum2))); { 两个Word类型乘法} WNum1 := 11; WNum2 := 22; Memo1.Lines.Add('Mulitiply(' + IntToStr(WNum1) + ', ' + IntToStr(WNum2) + ') = ' + IntToStr(Multiply(WNum1, WNum2))); end; end.
4、其实声明的重载方法仍然需要分别编写函数,但起码可以用相同的名称,编译器会根据传送给函数的参数,调用相应的正确函数。
5、F9编译运行后,按Button1后结果如下:
Note:
重载函数是通过参数表来工作的,就是说可以改变函数使用参数的类型或个数,但不能通过改变返回值来建立重载函数。
例如下面的例子是非法的,不可以构成重载:
function DoSomething: Integer; overload; function DoSomething: Double; overload;如果编译含有上面这些行代码的程序,会得到编译器错误“Declaration of ‘DoSomething’differs from previous declaration”。
以上代码均在Delphi7下测试通过。