zoukankan      html  css  js  c++  java
  • 深入类中的方法[7] - 关于 inherited

    // inherited 就是调用父类方法的一个特殊命令; 举例:
    
     
    
    unit Unit1;
    
     
    
    interface
    
     
    
    uses
    
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    
      Dialogs, StdCtrls;
    
     
    
    type
    
      TForm1 = class(TForm)
    
        Button1: TButton;
    
        procedure Button1Click(Sender: TObject);
    
      end;
    
     
    
      {建立父类, 类中包括一个函数 Fun 和一个等待覆盖的虚方法 Proc}
    
      TBass = class
    
        procedure Proc; virtual;
    
        function Fun(x,y: Integer): string;
    
      end;
    
     
    
      {建立四个子类, 分别覆盖父类的虚方法}
    
      TChild1 = class(TBass)
    
        procedure Proc; override;
    
      end;
    
     
    
      TChild2 = class(TBass)
    
        procedure Proc; override;
    
      end;
    
     
    
      TChild3 = class(TBass)
    
        procedure Proc; override;
    
      end;
    
     
    
      TChild4 = class(TBass)
    
        procedure Proc; override;
    
      end;
    
     
    
     
    
    var
    
      Form1: TForm1;
    
     
    
    implementation
    
     
    
    {$R *.dfm}
    
     
    
    { TBass }
    
    function TBass.Fun(x, y: Integer): string;
    
    begin
    
      Result := IntToStr(x + y); {父类函数是返回两个数的和}
    
    end;
    
     
    
    procedure TBass.Proc;
    
    begin
    
      ShowMessage('TBass');      {父类的虚方法会弹出信息: TBass}
    
    end;
    
     
    
    { TChild1 }
    
    procedure TChild1.Proc;
    
    begin
    
      inherited Proc;            {调用父类的 Proc 方法}
    
    end;
    
     
    
    { TChild2 }
    
    procedure TChild2.Proc;
    
    begin
    
      inherited                {调用父类的同名方法可以省略方法名}
    
      ShowMessage('TChild2');    {然后弹出自己的信息框}
    
    end;
    
     
    
    { TChild3 }
    
    procedure TChild3.Proc;
    
    begin
    
      ShowMessage('TChild3');    {先弹出自己的信息框}
    
      inherited                {再调用父类的同名方法}
    
    end;
    
     
    
    { TChild4 }
    
    procedure TChild4.Proc;
    
    begin
    
      ShowMessage(inherited Fun(11,22)); {调用父类的那个求和的函数}
    
    end;
    
     
    
     
    
    {测试}
    
    procedure TForm1.Button1Click(Sender: TObject);
    
    var
    
      c1: TChild1;
    
      c2: TChild2;
    
      c3: TChild3;
    
      c4: TChild4;
    
    begin
    
      c1 := TChild1.Create;
    
      c2 := TChild2.Create;
    
      c3 := TChild3.Create;
    
      c4 := TChild4.Create;
    
     
    
      c1.Proc; {  : TBass}
    
      c2.Proc; {先显示: TBass;   再显示: TChild2}
    
      c3.Proc; {先显示: TChild3; 再显示: TBass}
    
      c4.Proc; {  : 33; 11+22=33}
    
     
    
      c1.Free;
    
      c2.Free;
    
      c3.Free;
    
      c4.Free;
    
    end;
    

     

  • 相关阅读:
    使用select和shutdown
    SMTP协议初探(二)linux下c编程实现发邮件
    ortp使用详解 ortprelease.pdf
    网易校园招聘c++题目如何让new操作符不分配内存,只调用构造函数
    虚拟地址空间,堆栈,堆,数据段,代码段
    关于double的输入输出
    CodeForces1238DABstring CodeForces思维+字符串反向思考
    CodeForces1234CPipesdfs
    CodeForces1221A2048 Game思维题
    排序
  • 原文地址:https://www.cnblogs.com/luckForever/p/7255023.html
Copyright © 2011-2022 走看看