我在学习类的时候,当我把自定义的对象Free的时候,调用它的Button控件不见了?
以下是源码:
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  THuman=class
  private
    age:integer;
  public
    constructor Create();
    procedure PrintWWW();
  end;
var
  Form1: TForm1;
//  Man1:THuman;
implementation{$R *.dfm}
procedure THuman.PrintWWW();
begin
  showmessage('printWWW');
end;constructor THuman.Create();
begin
  inherited Create();
//  age:=0;(如果加上这句的话,退出From还会出错呢!)
  showmessage('Create THuman Class!!!');
end;procedure TForm1.Button1Click(Sender: TObject);
var
  Man1:THuman;
begin
  Man1.Create();
  Man1.Free();
  //man1.Destroy();
end;
end.

解决方案 »

  1.   

    你的 constructor Create();有问题;
    你这样的写的话,你就要完全自己写Create()的全部;
    实际上inherited Create();没有起到任何作用
      

  2.   

    procedure THuman.free();
    begin
      showmessage(self.ClassName );  //这里的self是什么? 看看inherited的代码
      inherited;
    end;procedure TObject.Free;
    begin
      if Self <> nil then
        Destroy;
    end;
      

  3.   

    不明白,你连Object Pascal的语法都不懂吗?
    var
      Man1: THuman;
    begin
      Man1 := THuman.Create();
      Man1.Free;
    end;这不是C++呀!
      

  4.   

    ************************
    Man1.Create() 
    //改为 
    Man1 = THuman.Create;
    ************************
    你的程序就没问题。
    至少为什么?我想大概是...不知道了,要看看asm有什么区别才知道了
      

  5.   

    另外,TObject.Create构造器是静态方法,是不能override的,就不应当使用inherited关键字!着实觉得,你应当认真的学习一下Object Pascal的语法!
      

  6.   

    呵呵,问题还不少..
    在我看来,应该有两处错误.
    (1)
    ....
    public
        constructor Create();//没加override
    ....(2)
    ....
        Man1.Create();//应该用Man1=THuman.Create;
    ....
    大家说是不是啊?
      

  7.   

    回复: TommyTong(童童--百姓爱这个国呀,谁来爱百姓呀?)
    TObject.Create方法你说是静态方法?我的理解是静态方法是不能用Override重载的.
    但TObject.Create竟然能被Override,那么它就不应该是静态的.(虽然我Create那里没有加)你说的是TObject.Create不能override?
    还是说没有override不能用inheritted?
      

  8.   

    不明白,你连Object Pascal的语法都不懂吗?
    var
      Man1: THuman;
    begin
      Man1 := THuman.Create();
      Man1.Free;
    end;这不是C++呀!
      

  9.   

    回复: TommyTong(童童--百姓爱这个国呀,谁来爱百姓呀?)
    TObject.Create构造器是静态方法Sorry,我知道你是对的了,我刚才试过了.
    之前是我看少了一个参数,
    CS打多了反而看不清了^_*