本章要点
基本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)移位运算