zoukankan      html  css  js  c++  java
  • (4)关于类的重载

    unit Unit1;

    interface

    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.OleCtnrs;

    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

      TMyForm = class
        public
        procedure Show2;virtual; //虚方法
      end;

     TMyFrom1 = class(TMyForm)

      public
        procedure Show2;override; //覆盖父类同名的方法,也可看作重载。

        //overload重载本类里面的函数或者过程,简单来说就是在当前类中可以声明多个同名但参数不同的函数或过程,下面就声明了两个同名却参数不同的过程
        procedure Show3(str,Str1 : string);overload;
        procedure Show3(Str: String);overload;

     end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}





    { TMyForm }

    procedure TMyForm.Show2;
    //父类的Show2
    begin
      ShowMessage('这是父类的');
    end;


     { TMyFrom1 }
    procedure TMyFrom1.Show2;
    //子类的Show2
    begin
      inherited;  //该指令字的意思就是继承,执行父类中同名函数或者过程从而实现多态。当然也可以不继承
      ShowMessage('这是子类的');   //然后才输出自己的方法、
    end;

    procedure TMyFrom1.Show3(str, Str1: string);
    begin
      ShowMessage(str + Str1);  //通过overload重载的过程,他有两个参数
    end;

    procedure TMyFrom1.Show3(Str: String);
    begin
      ShowMessage(Str);         //还是刚才通过overload重载的过程,他有一个参数,他们虽然同名,但是却实现了不同的操作。
    end;



    procedure TForm1.Button1Click(Sender: TObject);
    //执行只有一个参数的Show3
    var
      my : TMyFrom1;
    begin
      my := TMyFrom1.Create;
      my.Show3('123');
      my.Free;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    //执行有两个参数的Show3
    var
      my : TMyFrom1;
    begin
      my := TMyFrom1.Create;
      my.Show3('123','123');
      my.Free;
    end;

    procedure TForm1.Button3Click(Sender: TObject);
    //执行子类的Show2,因为在子类Show2方法的实现过程中有inherited指令字,所以将会分别输出父类的Show2与子类的Show2
    var
      my : TMyFrom1;
    begin
      my := TMyFrom1.Create;
      my.Show2;
      my.Free;
    end;

    end.

     


    重载的好处就是真正的实现了面向对象的多态性,同样一个函数可以根据参数的不同实现不同的各种参数。大大的减少了代码的数量也方便我们记忆。

  • 相关阅读:
    [Linux]软件目录
    [Linux]查看Linux内核及发行版本
    [S7706]华为ACL
    [S7706]华为配置DHCP
    QML-密码管理器
    QML-AES加解密小工具
    LaTex中文article模板(支持代码、数学、TikZ)
    Memo-Tech
    VIM学习笔记
    CodeForces 674C Levels and Regions
  • 原文地址:https://www.cnblogs.com/mdnx/p/2573817.html
Copyright © 2011-2022 走看看