类如何被实例化.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  // 父类
  TTest = class
  private // 不可见
    FValue: Integer;
  protected // 派生类可见
    procedure Add;
    procedure Dec;
    procedure Multiply;
    procedure Division;
    procedure show; virtual; // 虚方法
  public // 可见
    function GetFValue: Integer;
    constructor Create; // Constructor 构造函数,如果不写这个也不会出什么错,加上目的是为了在类被创建的时候执行一些初始化
    destructor Destroy; // Destructor  析构函数,这个也可以不写。加上的目的是为了在类销毁的时候进行一些资源的释放
  end;

  // 子类
  TMyTest = class(TTest)
  protected
    procedure show; override; // 覆盖
  end;

var
  Form1: TForm1;
  MyTest: TMyTest; // 子类继承了父类的所有方法与属性,所以只需要定义子类就可以操作TTest的所有属性和方法了。

implementation

{$R *.dfm}
{ TTest }

procedure TTest.Add;
begin
  FValue := FValue + FValue; // 可直接使用类成员   相加
end;

constructor TTest.Create;
begin
  FValue := 0; // 在类进行创建的时候把FValue设置为0
end;

procedure TTest.Dec;
begin
  FValue := FValue - FValue; // 相减
end;

destructor TTest.Destroy;
begin
  FValue := 0; // 在类进行释放的时候把FValue设置为0
end;

procedure TTest.Division;
begin
  FValue := FValue div FValue; // 相除
end;

function TTest.GetFValue: Integer;
begin
  Result := FValue; // 返回FValue的值
  ShowMessage(IntToStr(Result)); // 显示FValue的值
end;

procedure TTest.Multiply;
begin
  FValue := FValue * FValue; // 相乘
end;

procedure TTest.show;
begin
  ShowMessage('我是父类');
end;

{ TMyTest }

procedure TMyTest.show;
begin
  inherited; // 继承父类的同名方法,在这里会执行父类的Show.
  ShowMessage('我是子类');
end;

 

{ 实现过程 }
procedure TForm1.Button1Click(Sender: TObject);
begin
  MyTest.FValue := 10; // 赋值
  MyTest.Add; // 调用add方法、
  MyTest.GetFValue; // 返回结果,20
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  MyTest.FValue := 10; // 赋值
  MyTest.Dec; // 调用dec方法。
  MyTest.GetFValue; // 返回结果, 0
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  MyTest.FValue := 10; // 赋值
  MyTest.Multiply; // 调用 Multiply方法
  MyTest.GetFValue; // 返回结果, 100
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  MyTest.FValue := 10; // 赋值
  MyTest.Division; // 调用 Division方法
  MyTest.GetFValue; // 返回结果 1;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  MyTest.show; // 先显示'我是父类' ,再显示‘我是子类’
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  MyTest.Free; // 释放类,Free也是一个隐含的属性.
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  MyTest := TMyTest.Create; // 实例类
end;

end.

 

此项目被张贴在未分类 。书签的 permalink

发表评论

电子邮件地址不会被公开。 必填项已用*标注