方法重载(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下测试通过。

posted on 2011-12-23 20:21  pchmonster  阅读(1255)  评论(0编辑  收藏  举报

导航