轻松掌握Delphi的类功能

技术与开发

学习内容:面向对象 学习进度:第八课 上手难度:★★★★★ 考试类型:二级Delphi

Delphi是基于面向对象编程的开发环境,类在面向对象的程序设计中是一个非常重要的概念。在二级考试中不要求考生对类的知识掌握很深,但是考生必须重点理解类的含义以及类和对象的关系,重点掌握如何定义一个类。

一、什么是类

在面向对象的程序分析和设计技术中,类就是对具有相同属性和相同操作的一组相似对象的定义。从另一个角度看,对象就是类的一个实例。类把数据和处理数据的方法封装在一起,可以减少因直接访问数据而造成的错误。从外部看,类就像一个部分可见的黑匣子,可见部分称为接口,通过这个接口可以访问类中不可见的数据部分,Delphi提供了一个保留字class,利用它可以定义一个类的对象。

类有三类成员,分别是Field(字段)、Property(属性)、Method(方法)。类的字段Field是类数据的一部分,对于该类的实例(对象)来说,一个字段就如同它的一个变量,字段可以是任何类型,也可以是另外的类,声明类的字段成员与声明变量一样,是在类中进行的。

类的属性Property对于组件来说就是列在Object Inspector(对象查看器)的内容。通过属性的定义可以给类成员变量以不同的访问权限,保证类中数据的封装性。 类的方法Method是在一个对象里执行特定操作的过程或函数,反映对象的行为而不是数据。

二、理解类的精华

有关类的概念,考生需要理解以下四点:

第一,类是对具有相同语义特性的一组对象的抽象。类将这组对象的操作特性、存储特性、约束规则等加以归纳,统一由类定义其共性。

第二,类具有创建类实例的功能,它具备构造和使用参与该类的所有类实例的一切信息。一个类可以有多个实例,一个实例也可以参与多个类。

第三,类为方法(过程或函数)提供存储。方法驻留在类中以节省存储空间,因为一个类的所有实例都可以共享这些方法。

第四,类为每一个实例分配存储空间,用于存储实例的状态。状态通过实例变量来描述,实例变量可以是基本数据类型如整型、实型,也可以是其他对象,还可以是两者兼有。

三、如何使用类的构造函数

类的构造函数可以完成对象的创建和初始化工作。在声明了一个类的变量之后,并没有实际创建该类的对象,只是定义了一个指向该类对象的指针,有时也称为类的引用。在类的构造函数中,不仅可以根据类的结构为类的对象分配内存空间,而且可以打开文件或数据库,读取一些初始数据或控制一些设备进行复位等。如果在定义类时没有定义构造函数,则系统会自动生成一个默认的构造函数。

除了默认的构造函数,我们可以自定义一个或多个构造函数。考生在自定义构造函数时需要注意以下几点:1.在定义构造函数时,使用保留字Constructor来声明构造函数,通常函数名使用Create。2.定义的构造函数可以有参数列表,可以重载构造函数。3.一般在自定义构造函数的函数体中,在开始部分使用inherited保留字来调用父类的构造函数。下面我们通过一个例子来说明如何自定义一个构造函数:

type

TWrapMemo = class(TMemo) //自定义TWrapMemo类,这个新类从系统提供的类TMemo继承而来

public

Constructor Create(AOwner: TComponent); override;//在这里声明构造函数,构造函数在重载时要在后面加“overload”

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

Constructor TWrapMemo.Create(AOwner: TComponent); //定义构造函数在关键字implementation 的后面

begin

inherited Create(AOwner); //先Create

self.Width:=185;

self.Height:= 89;

self.visible:=true;

self.Color:=clblue;; //设置对象的属性

end;

小知识:构造函数与普通函数的区别

构造函数与普通函数的主要区别在于:第一,构造函数的函数名必须和类名完全相同,普通函数名不能和类名相同。第二,构造函数没有返回值,普通函数可以有返回值;第三,构造函数的函数体是在对象创建的时候自动执行,普通函数的函数体是函数被调用的时候才执行。

读者反馈

读者 涛水:请教一下,在定义函数和过程时其形式参数允许有多个吗?

小新解答:当然可以允许有多个形式参数。所有的形式参数必须说明类型,相同类型的形参之间用逗号隔开,不同类型的形参用分号隔开。比如:function benben(a,b,c:integer;x,y,z:char):integer;其中a、b、c为都整型,用逗号隔开,而x、y、z为字符型,因此前面用分号隔开。