⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chapt7.htm

📁 Delphi经典编程入门Delphi讲座----------电子书籍
💻 HTM
字号:
<html><head><title>第七章  对象与类类型</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body bgcolor="#00000" text="#00cc66"><p align="center"><font color="#FF6666" size="4"><b>第七章 对象与类类型</b></font></p><p>   从用户角度考虑,用户并不需要了解面向对象编程,就可编写Delphi应用程序。当用户在建立新窗体,添加新构件以及处理事件时,大部分相关代码会由Delphi自动产生。但是,知道语言及其细节,对理解Delphi正在做什么并完全掌握它是很有帮助的。特别是有关类类型的概念及用法是学习后面构件编程及Delphi深入编程的基础。<br>    面向对象的编程语言基于三个基本概念:类、继承及多态性。类实际上是用户自定义数据类型之一,只是因为增加了方法、继承、多态等要素,从而在面向对象的编程中变得十分重要。类是Object   Pascal面向对象编程的基础。类类型具有可继承性,被继承的类我们称为祖先类(基类),继承下来的类我们称为派生类(子类)。<br>    本章就有关类类型的概念及用法进行较为详细的介绍。<br>  <b>7.1 类类型和对象</b><br>    类和对象是两个常用的术语,然而经常容易混淆,因此需要区别它们的定义。<br>    类与本书Pascal语言部分介绍的记录类似,也是包含有各种域的结构化数据类型,然而,类包含方法。方法就是操纵对象域数据的过程或函数。类类型把数据和方法封装在一起。<br>    对象是类的实例(instance),即由类定义的数据类型的变量。对象是实体,当程序运行时,对象为它们的内部表达占用一些内存。对象与类的关系就象变量与类型的关系。<br>    在Object Pascal中,声明类数据类型使用保留字Class。下面是类类型声明的语法规则(图7.1)。<br>    其中,heritage部分指出类的直接祖先类,其语法规则如图7.2。<br>    从以上语法示意图可以看出,类类型可以指定一个祖先类型,表示该类型是从这个指定的祖先类型继承下来的,例如:<br>    Type TPoint=Class(TObject)<br>    上例中,声明了一个名叫TPoint的类类型,该类型是从类TObject继承下来的。注意:类类型的标识符一般以T打头,以区别于其它数据类型。如果声明中省略了heritage部分,表示该类型是继承缺省的祖先类TObject,例如:   <br>  Type TPoint=Class<br>    Component List部分列出类的成员列表。从语法示意图还可以看出,类类型声明中可以没有成员列表,也可以有,其语法规则如图7.3。<br>    可以看出,类型可以有3类成员,分别是Field(字段)、Method(方法)、property(特性)。<br>    类类型中的字段也就是类的数据部分,其声明语法同记录中字段的声明语法相似,其语法规则如图7.4。<br>    其中字段的类型可以是各种数据类型,甚至是另一个类类型。Visibility Specifier部分定义构件成员的可见性。在Object Pascal中,类成员的可见性是通过这么下面几个保留字来定义的:Published,Public,Protected,Private,Automated。<br>    一个典型的类类型示例如下:<br>  TDate = Class <br>  private <br>   Month,Day,Year:Integer;<br>  public <br>   constructor Create; <br>   destructor Destroy;<br>    override; <br>    Procedure SetValue(m,d,y:Integer);<br>    Function LeapYear:Boolean; <br>  end;<br>    在Tdate类中,声明了三个字段, Month,Day,Year,数据类型是Integer,并且声明了一个构造Create,一个析构Destroy,一个函数LeapYear,其返回类型是Boolean,一个过程SetValue。其中三个字段,Month,Day,Year的可见性为Private表示只有类型本身的函数或过程可以访问,而在Public部分定义的函数是使用该方法的对象都可以访问的。<br>    注意:跟其它数据类型不同的是,类类型的声明只能出现在Program单元或UNIT单元最外层作用域的类型定义部分,而不能定义在变量说明部分或一个过程或函数内。因此,类类型的作用域总是全局的。<br>    在类类型中声明的方法实际上是向前的定义(forward declaration ),因为必须在类类型定义之后,在同一模块的其它某个地方声明,即在程序的Implementation区进行对该方法进行定义。例如,上面类的方法定义为:<br>  implementation<br>  {$R *.DFM}<br>  procedure TDate.SetValue(m,d,y:integer);<br>  begin<br>   Day:=d; Year:=y;<br>  end;<br>  function TDate.LeapYear:Boolean;<br>  begin <br>  if (Year mod 4<>0) then LeapYear:=False <br>  else if (Year mod 100<>0) then LeapYear:=True <br>  else if (Year mod 400<>0) then LeapYear:=False<br>  else LeapYear:=True;<br>  end;<br>    访问对象中的各个成员,跟访问记录变量中的字段类似,是用对象名加一个小圆点和成员的名,例如:<br>  Var ADay:TDay; <br>    Leap:Boolean;<br>  begin 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -