方法重载(Overloading procedures and functions)
从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下测试通过。
posted on 2011-12-23 20:21 pchmonster 阅读(1280) 评论(0) 收藏 举报


浙公网安备 33010602011771号