Delphi中的构造函数

来源:互联网 发布:武汉软件定制开发 编辑:程序博客网 时间:2024/05/16 09:47
 

Delphi中所有类都继承自TObject ,Create默认不是虚方法 ,Destroy默认是虚方法.
VCL中组件继承的大多Create都被声明成虚方法了。

在Delphi当中构造函数当中的create与析构函数destroy大部分都是虚方法.可以覆盖.
被覆盖的函数必须是虚(virtual)的,或者是动态(dynamic)的.

(Constructors)构造函数,

用来创建和初始化一个实例对象, 构造函数返回的对象的引用. 初始化对象是基于传给构造函数的参数值.
当类引用调用构造函数时,若执行过程中发生异常,则自动调用析构函数destroy来销毁不完整的对象.
声明为虚方法的构造函数,和声明为静态时时相同的.虚构造函数允许使用多态.
构造函数的初始化过程:
1.它在堆中为对象分配内存,并设置所有的有序类型的字段为0,把nil赋值给所有的指针和类类型的字段.使所有的字符串类型的字段为空.
2.构造函数中指定的其他动作(命令)开始执行.
在派生类中构造函数的初始化过程:
1.调用继承下来的构造函数,对继承的字段进行初始化.
2.然后对派生类中新引入的字段进行初始化.
(以为构造函数总是把新对象分配的内存进行"清零" <clear>,所以,对象的所有字段开始时都是0 <有序类型>,nil <指针和类>,空 <字符串>或者unasslgned <变体类型>.所以,除非字段的值不为0或者空值,我们没有必要在构造函数当中初始化各字段);
type
TShape = class(TGraphicControl)
private
FPen: TPen;
FBrush: TBrush;
procedure PenChanged(Sender: TObject);
procedure BrushChanged(Sender: TObject);
public
Constructor Create(Owner: TComponent); override;
Destructor Destroy; override;
...
end;
Constructor TShape.Create(Owner: TComponent);
begin
inherited Create(Owner); // 初始化继承下来的部分
Width := 65; // 改变继承下来的属性
Height := 65;
FPen := TPen.Create; // 初始化新字段
FPen.OnChange := PenChanged;
FBrush := TBrush.Create;
FBrush.OnChange := BrushChanged;
End;

构造函数用于创建类的实例,析构函数用于销毁类的实例
构造函数,析构函数都是类的产物,在你写一个类的时候,你可以在构造函数里做一些初始化
的工作,也可以什么都不做,编译器会帮你自动生成的!实例就是类的对象!我们常说的人类,狗类
抽象化后人就是一个类,人类中的一个体,比如说张三,就是我们说的实例,构造函数就是在张三出生的时候
附给他的一些初始化的东西.比如给他大脑,给他JJ...析构函数就是销毁这个实例,人死了要火化吧,要不然
占用地球资源么!

//这篇文章的作者是谁,以上说得不是一般的抽象。呵呵~。

转自:http://apps.hi.baidu.com/share/detail/17773442