• (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.

     


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

  • 相关阅读:
    【TensorFlow】tf.nn.max_pool实现池化操作
    nginx页面不能正常访问排除方法
    Nginx启动错误:error while loading shared libraries: libpcre.so.1
    解决:make:cc 命令未找到的解决方法
    spring mvc:练习:表单验证(javaConfig配置和注解)
    spring mvc:练习:javaConfig配置和注解
    SpringMvc中的校验框架@valid和@validation的概念及相关使用 和BindingResult bindingResult
    springmvc的@Validated/@Valid注解使用和BindingResult bindingResult
    spring MVC注解深入研究
    spring mvc: 注解和JavaConfig实例
  • 原文地址:https://www.cnblogs.com/mdnx/p/2573817.html
Copyright © 2020-2023  润新知