如何创建类(50分)

  • 主题发起人 主题发起人 jingandhe
  • 开始时间 开始时间
J

jingandhe

Unregistered / Unconfirmed
GUEST, unregistred user!
unit commonUnit;

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ExtCtrls,Contnrs,INIFILES,DB, ADODB;
type TstatuschangedEvent = procedure (sender:TObject;statustype:Integer;status:boolean) of object; //布尔变量改变事件
type TvaluechangedEvent = procedure (sender:TObject;statustype:Integer;value:Integer) of object; //数字变量改变事件
//设备基类
type
Tdevice=class
private
Fchildtype:Integer; //设备子类别
Fdeviceno:Integer; //设备编号
Fenabled:Boolean; //设备开启使能
public
property childtype:Integer read Fchildtype write Fchildtype;
property deviceno:Integer read Fdeviceno write Fdeviceno;
property enabled:Boolean read Fenabled write Fenabled;
end;
//设备控制柜基类
type
Tdevicetank=class
private
Flist:TList; //控制柜引用列表
Ftankno:Integer; //控制柜编号
Fenabled:Boolean; //控制柜开启使能

public
property list:TList read Flist;
property tankno:Integer read Ftankno write Ftankno;
property enabled:Boolean read Fenabled write Fenabled;
constructor create;
destructor destroy;override;
end;

implementation

{ Tdevicetank }

constructor Tdevicetank.create;

begin


end;

destructor Tdevicetank.destroy;
begin

inherited;
end;

end.

大家帮帮我,我刚刚接触面向对象编程.以上是已经定义好的类的框架,我搞不清楚为什么Tdevice这个类不需要constructor和destructor这个过程,还有Tdevicetank这个类的constructor是不是应该写成给Flist、Ftankno、Fenabled赋值。use下面那两个type 以后怎么引用呢?真是不太懂,请大家帮忙。
 
Tdevice 从Tobject 派生, 它本身就具有了构建,和析构方法, 当然也可以写。

Tdevicetank类的Flist、Ftankno、Fenabled成员 作为属性, 外部可读可写,所有可以不在初始化或者创建时赋值, 可以创建对象后赋值。 当然创建时也可以赋值。
 
谢谢你,那是不是说如果Tdevicetank这个类也可以不用要constructor和destructor这个过程,如果不给Flist、Ftankno、Fenabled赋值是不是constructor可以直接写成:
constructor Tdevicetank.create;
begin
inherited create;
end;
问完了就给分可以吗?还有use下面那两个type 以后怎么引用呢?
 
按你的需要,constructor和destructor不要就可以了
如果要创建时赋值,就写constructor,然后根据构造参数赋值就可以了
如果你在类中使用了对象,而对象是在类中创建,那你还在要constructor中Create
在destructor中Free

TstatuschangedEvent和TvaluechangedEvent
只要你的事件定义是符合
procedure (sender:TObject;statustype:Integer;status:boolean);
procedure (sender:TObject;statustype:Integer;value:Integer);
的就直接赋值给对象使用就可以了,但好象你并没有为你的对象写上
事件。。。也没有写上事件的执行代码。。。
 
多人接受答案了。
 
后退
顶部