我是Delphi菜菜,少见多怪!大家帮我看看。type
  TForm1 = class(TForm)
  private
    Flag: Boolean;
  public
    constructor Create(AOwner: TComponent); override;
  end;var
  Form1: TForm1;implementationconstructor TForm1.Create(AOwner: TComponent);
begin
  Flag := True;
  inherited Create(Application);
end;end.Flag是TForm1的成员变量, 可是在TForm1.Create(AOwner: TComponent)函数中:
在 "TForm1实例化之前" 就对 "Flag进行了付值",  也就是说在为TForm1分配内存空间之前,Flag就已经有了内存空间. 是怎么回事? Delphi中的类和对象怎么区分?

解决方案 »

  1.   

    Delphi的面向对象机制跟其它是一样的,我记得C++里面也是可以这样的吧。
    应该理解为:先为Form1分配了内存空间,然后才调用构造函数的。
      

  2.   

    不会吧,先分配内存空间,然后才调用构造函数?C++里的构造函数是自动
    调用的。Delphi的这种做法有点象是给一个类的成员变量付值,而不是一个
    对象!我觉得。
      

  3.   

    Delphi里的构造函数也是自动调用的啊,只是先分配内存空间再调用的,
    C++不也是么?
      

  4.   

    Flag := True;
     inherited Create(Application);
    通常,我们不这样写的,是这样写的
     inherited Create(AOwner);
     Flag := True;form不一定用Application创建,所以Application的传递有问题。
    类在创建的时候,已经为变量、方法分配了存储空间,否则Create的时候,Self隐含参数就没有意义了。
      

  5.   

    也就是说在调用TFrom1.Create()函数之前就已经分配了空间。eg:  MyForm: TForm1;  //在此就分配了空间,对吧?
         TForm1.Create(Application);