zoukankan      html  css  js  c++  java
  • 方法重载(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下测试通过。

  • 相关阅读:
    C#中的Dictionary类,默认key是区分大小写的
    for循环的3个参数
    C#循环读取文件流,按行读取
    C#合并两个Dictionary的方法
    C#的Equals不区分大小写
    php的isset()和empty()区别
    css !important的作用
    mysql创建用户,并指定用户的权限(grant命令)
    解决安卓微信浏览器中location.reload 或者 location.href失效的问题
    【转】前端懒加载以及预加载
  • 原文地址:https://www.cnblogs.com/pchmonster/p/2299949.html
Copyright © 2011-2022 走看看