方法重载(Overloading procedures and functions)

从Delphi4开始,Object Pascal可以使用具有相同函数名但又有不同参数的函数。

共享公用名称的方法就称重载方法

我们共同来完成一个范例,我们要实现两个数的乘积,这两个数有可能是IntegerDoubleWord类型,而我们只需要一个Multiply函数来实现。

1、新建一个Application

2、Form1上放置一个Memo组件(Memo1)和Button组件(Button1),如下所示:

0043

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后结果如下:

0044

Note:

重载函数是通过参数表来工作的,就是说可以改变函数使用参数的类型或个数,但不能通过改变返回值来建立重载函数。

例如下面的例子是非法的,不可以构成重载:

function DoSomething: Integer; overload;

function DoSomething: Double; overload;

如果编译含有上面这些行代码的程序,会得到编译器错误“Declaration of ‘DoSomething’differs from previous declaration”。

以上代码均在Delphi7下测试通过。

你可能感兴趣的:(overloading)