书城计算机网络Delphi程序设计教程
36209800000011

第11章 Delphi的编程语言--ObjectPascal(1)

本章要点

基本Pascal语言的语法

面向对象的Pasacl--ObjectPascal的语法

Delphi的编程语言是ObjectPascal,即面向对象的Pascal。ObjectPascal是对传统的Pascal语言的扩展,是增加了面向对象功能的Pascal语言。

Pascal语言是结构化程序设计语言,具有程序结构严谨合理、数据结构完整、语言语法简单、语句通用灵活、程序易写易读、编程风格优美等特点,是程序员学习结构化程序设计的最佳选择。

面向对象的程序设计技术,是当今程序设计的流行技术,是解决软件危机的重要方法,是程序设计技术发展的重要阶段,是当前编程中必不可少的重要工具。

本章将对Pascal和ObjectPascal基本语法进行介绍。

4.1代码格式

在用一种编程语言编写程序代码时,除了要符合语言的语法规则外,还应该遵从一定的书写格式。ObjectPascal也不例外。

4.1.1字符集和保留字

1.字符集

ObjectPascal语言使用的字符集包括如下内容。

英文字母:26个英文字母的大写A-Z、小写a-z;数字:0、1、2、3、4、5、6、7、8、9;特殊字符:等。

2.保留字

保留字,也称关键字,是语言定义的、用做专门用途的字符串,用户不得另作它用。

ObjectPascal的保留字如表4-1所示。

除此之外,ObjectPascal中使用的标准命令,也是保留字,如表4-2所示。

4.1.2字母的大、小写

在Pascal程序代码中,忽略字母的大、小写,即大、小写视为同一字母,如“NAME”、“Name”和“name”,都为同一标识符。程序代码中使用大、小写,是为了美观、易读。

4.1.3空白区

在Pascal语言中,空格、换行和TAB键都被称为空白区。编译器将忽略空白区而不影响编译。

4.1.4注释

注释是为增强程序的可读性而在程序代码中加入的说明,它不影响程序的编译。

Pascal代码中的注释有3种格式:

注释内容:用包括注释内容,用于多行注释。

注释内容:用包括注释内容,用于多行注释。

注释内容:用标志其后为注释内容,用于单行注释。

4.1.5书写风格

在Pascal程序代码中,为增强程序的可读性和美观,也提倡缩排方式,如:

4.2常量和变量

程序中处理的数据有两种形态:常量和变量。

4.2.1常量

常量是其值在程序运行过程中保持不变的数据量。

如果程序中一个值相同的数据量被多次使用,就可以将这个数据量定义为一个常量。

在ObjectPascal中,定义常量用如下的格式:

Const常量名1=常量值1;

常量名2=常量值2;

其中Const是定义常量的保留字,常量名是在程序中代表常量值的标识符,常量值是程序中需要处理的数据的值,这些值可以是数值,可以是字符或字符串,也可以是表达式。

典型的常量定义如:

ConstMax=100;

Chr=‘A’;

Str=‘Iamastudent’;

这样定义之后,程序中出现Max、Chr、Str的地方分别代表数值100、字符A、字符串Iamastudent。

4.2.2变量

变量是其值在程序运行过程中可以改变的数据量。

变量在使用前必须进行定义。定义变量要指定变量名(变量标识符),说明变量的数据类型。定义变量实际是在内存中指定存储变量的一段存储空间。

在ObjectPascal中,定义变量用如下的格式:

var

变量名1:变量类型1;

变量名2:变量类型2;

其中var是定义变量的保留字,变量名是变量在程序中的标识符,变量类型是变量的数据类型。相同类型的变量可以放在一起定义,变量间用逗号分开。

典型的变量定义如:

var

m,n:Integer;

Str:String;

这里m,n和Str分别被定义成整数型变量和字符串型变量。

4.3数据类型

一种语言的数据类型,是指这种语言可以处理的数据的类型。一个变量的数据类型决定了它可以赋什么样的值、允许进行怎样的操作。所以,学习一种语言,掌握这种语言的数据类型是很重要的。

ObjectPascal有丰富的数据类型,这为它的编程提供了很大的方便。这些数据类型可分为基本数据类型、构造数据类型和指针类型。

4.3.1基本数据类型

ObjectPascal的基本数据类型包括整数类型、实数类型、布尔类型、字符类型和字符串类型等几类。

1.整数类型(Integer)

整数类型是取值为整数的数据类型。

ObjectPascal中的整数类型又包括以下不同的类型,其位数和取值范围也不相同。

Integer32位有符号整数,取值范围为-2147483648~2147483647。

Cardinal32位无符号整数,取值范围为0~4294967295。

Shortint8位有符号整数,取值范围为-128~127。

Byte8位无符号整数,取值范围为0~255。

Smallint16位有符号整数,取值范围为-32768~32767。

Word16位无符号整数,取值范围为0~65535。

Longint32位有符号整数,取值范围为-2147483648~2147483647。

Longword32位无符号整数,取值范围为0~4294967295。

Int6464位有符号整数,取值范围为-263~263-1。

定义整数型变量的实例如下:

2.实数类型(Real)

实数类型是取值为实数的数据类型。

ObjectPascal中的实数类型又包括以下不同的类型,其位数、取值范围和有效数字精度也不相同。

Real8字节,取值范围为5.0×10-324~1.7×10308,有效数字精度15~16位。

Real486字节,取值范围为2.9×10-39~1.7×1038,有效数字精度11~12位。

Single4字节,取值范围为1.5×10-45~3.4×1038,有效数字精度7~8位。

Double8字节,取值范围为5.0×10-324~1.7×10308,有效数字精度15~16位。

Extended10字节,取值范围为3.6×10-4951~1.1×104932,有效数字精度19~20位。

Comp8字节,取值范围为-263~2633.布尔类型(Boolean)-1,有效数字精度19~20位。

Currency8字节,取值范围为-922337203685477.5808~922337203685477.5807,有效数字精度19~20位。

定义实数型变量的实例如下:

布尔类型是只能取True(真)和False(假)两种值的数据类型,用于逻辑变量。

ObjectPascal的布尔类型包括4种类型,它们是Boolean、ByteBool、WordBool和LongBool,分别占用1、1、2、4个字节,最常用的只有Boolean,其余3种只用于特殊情况。

定义布尔型变量的实例如下:

4.字符类型(Character)

字符类型用于表示单个字符。

ObjectPascal的字符类型有3种类型。

Char一般的(缺省)字符类型,占一个字节,用于保存单个ANSI标准字符。

AnsiChar占一个字节,用于保存单个ANSI标准字符。

WideChar占两个字节,用于保存单个Unicode标准字符。

定义字符型变量的实例如下:

5.字符串类型(String)

字符串类型用于表示字符序列(称字符串),其长度(即包含字符的个数)是可变的,但一般有一个最大长度的限制。

ObjectPascal的字符串类型有3种类型,允许的最大长度不同。

ShortString最大长度为255个字符;

AnsiString最大长度为231个字符;

WideString最大长度为230个字符。

定义字符串型变量的实例如下:

4.3.2构造数据类型

ObjectPascal的构造数据类型包括枚举类型、子域类型、记录类型、集合类型、数组类型和文件类型等。

1.类型声明

构造数据类型的一个共同特点就是要先用类型声明来声明类型,然后再用前面介绍的方法定义这种类型的变量。

类型声明的语法格式如下:

Type

新类型名1=类型1;

新类型名2=类型2;

其中Type是类型声明的保留字。

这里定义的只是一种新的数据类型的类型名,如同前面讲的Intege、Real、String一样,还不是可以使用的变量;要使用变量,还要用前面介绍的方法定义这种类型的变量。

2.枚举类型

枚举类型是只能取值于所有列举出的(即枚举)有限个元素的一种数据类型。

枚举类型的类型声明格式如下:

Type

枚举类型名=(元素1,元素2,元素3,…);

其中枚举类型名是用户定义的枚举类型的类型标识符,凡出现的该标识就代表用户定义的这种枚举数据类型;圆括号中的元素1、元素2、…,就是这个枚举类型所包含的所有元素列表,元素间用逗号分开。

如可以声明一个包含几种可能颜色的枚举数据类型如下:

Type

Colors=(red,blue,yellow,green,purple);

这样Colors就是一个枚举数据类型,用它再来定义枚举型变量,如

var

color1:Colors;

这里变量color1在程序中只能取声明类型时列举的几种取值之一。

3.子域类型

子域类型,也有称子界类型,是取值于给定取值范围的一种数据类型,它与枚举类型的区别是,枚举类型枚举变量所有可能的取值,而子域类型只给出变量可能的取值范围。

子域类型的类型声明格式如下:

Type

子域类型名=下界..上界;

如可以声明一个取值在整数1到9之间的子域数据类型如下:

Type

Int=1..9;

这样Int就是一个子域数据类型,用它再来定义子域型变量,如var

int1:Int;

同样,这里变量int1取值只能在1到9范围内。

4.记录类型

记录类型是可以包含若干个不同数据类型元素的一种数据类型。

记录类型的类型声明格式如下:

Type

记录类型名=Record

元素1:类型;

元素2:类型;

end;

其中Record是保留字,说明用户定义的记录类型名是一个记录数据类型,Record与end之间是记录的元素列表,包含的元素可以是不同的数据类型,用前面讲过的格式指明每个元素的数据类型。

如可以声明一个包含学生姓名、年龄和性别等元素的记录类型及记录类型的变量如下:

Type

Student=Record

Name:String;

Age:Integer;

Sex:Boolean;

End;

Var

Student1:Student;

经这样定义之后,Student1就成为一个包含3个元素的记录类型的变量了。

5.集合类型

集合类型是包含相同数据类型元素的一种数据类型。

记录类型的类型声明格式如下:

Type

集合类型名=Setof元素类型;

如可以声明一个其元素为子域类型的集合类型如下:

Type

Int=Setof1..9;

这样就声明了一个元素为子域类型的集合类型Int。

6.数组类型

数组是若干个相同数据类型的元素排列在一起的一种数据类型。

数组可以是一维的,也可以是多维的,每一维的元素个数可以不同。

数组类型的类型声明格式如下:

Type

数组类型名=Array[下标1定义,下标2定义,…]of元素数据类型;

其中Array是声明数组类型的保留字,中列出声明的数组的维数及每维包含的元素个数,of后面指明数组元素的数据类型。

如可以声明一个元素类型为整数的二维数组类型如下:

Type

IntArray=ArrayofInteger;

这里声明了一个其元素类型为整数的二维数组类型IntArray,第一维有5个元素,第二维有10个元素,共有5×10个元素组成了一个矩阵。

7.文件类型

ObjectPascal把文件也当做一种数据类型。

文件类型是若干相同类型元素的有序集合,其元素的数据类型可以是除文件类型之外的任意类型。

文件类型的类型声明格式如下:

Type

文件类型名=fileof元素类型;

4.3.3指针类型

指针是一种特殊的数据类型。其他类型的变量对应的内存存放的是该变量的值;而指针变量对应的内存存放的是存储另一变量的内存地址,称为指针指向另一个变量。另一变量的数据类型,称为指针的基类型。

指针类型的类型声明格式如下:

Type

指针类型名=基类型;

其中表示等号左边的标识符是一个指针变量。

使用指针变量可以增加程序设计的灵活性,但也增加了程序的复杂性,使用时应慎重。

4.4运算符和表达式

ObjectPascal对数据的运算和处理是通过运算符和表达式实现的。

4.4.1运算符

ObjectPascal的运算符分为若干种类。按参加运算数的数据类型分,可分为算术运算符、布尔运算符、关系运算符等;按参加运算的数的个数分,可分为单目(也称一元)运算符(即一个数参加运算)、双目(也称二元)运算符(即两个数参加运算)和多目(也称多元)运算符(即多个数参加运算)。

1.算术运算符

算术运算符(也称数值运算符)是进行算术运算的运算符,参加运算的数是整数类型或实数类型,运算的结果也是整数类型或实数类型。

1)加、减、乘运算

为多目运算符,参加运算的数可以为整数或实数,结果也为整数或实数,若整数和实数混合运算,则结果自动向精度高的类型转化。

2)除法运算

实数除法,为多目运算符,参加运算的数可以为整数或实数,结果为实数。

div,mod:整数除法,为双目运算符,参加运算的数为整数,结果为整数,div为两整数除得的整数商,而mod为两整数除得的余数。如7div2,结果为3,而7mod2,结果为1。

3)位运算

not,and,or,xor:not为单目运算符,其他为双目运算符,参加运算的数为整数,结果也为整数,分别将运算数表示成8位二进制数后按位求反、按位相“与”、按位相“或”、按位相“异或”。如7和9,表示成二进制数分别为00000111和00001001,not7,则为11111000,7or9,则为00001111。

4)移位运算