Object Pascal语言.ppt

上传人:e****s 文档编号:76396623 上传时间:2023-03-10 格式:PPT 页数:107 大小:265KB
返回 下载 相关 举报
Object Pascal语言.ppt_第1页
第1页 / 共107页
Object Pascal语言.ppt_第2页
第2页 / 共107页
点击查看更多>>
资源描述

《Object Pascal语言.ppt》由会员分享,可在线阅读,更多相关《Object Pascal语言.ppt(107页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Delphi 程程序序设设计计第第3章章Object Pascal 语言语言 本章要点本章要点:Syntactic elements Syntactic elements语法元素语法元素 Data types Data types数据类型数据类型 Procedures and functions Procedures and functions过程和函过程和函数数 Classes and objects Classes and objects类和对象类和对象1第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.1 Syntactic elemen

2、ts语法元素语法元素ASCII 字符集字符集字母是大小写无关字母是大小写无关空格空格#32和控制符和控制符#0 到到#31,其中,其中#13 叫回叫回 车符或行的结束符车符或行的结束符 根本语法元素组合成表达式、声明和命令语句。命令语句描述算法行为,它是可执行的;表达式是一个语法单元,它出现在命令语句中并表示一个值;声明定义一个标志符比方函数或变量的名称,可以用在表达式或命令语句中.2第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.1 3.1 根本语法元素根本语法元素特殊符号 特殊符号是非文字和数字字符,或这类字符的组合,它们有固定的意义。单

3、字符的特殊符号:#$&()*+,-./:;组合字符特殊符号:(*(.*).)./:=注意:!惊叹号、双引号、%百分号、?问号、反斜杠、_下划线、|通道和破折号不是特殊符号。3第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言用来表示常量、变量、字段、类型、属性、过程、函数、程序、单元、库以及包。长度是255 个字符以字母或下划线_开始,后面可以是字母、数字和下划线,不包含空格、关键字不能用作标志符。3.1.2 标志符当一个标志符名称相同在多个地方声明时,使用它时可能要对标志符进行限定。限定标志符的语法为:identifier1.identifier

4、2例如:Form1.Button1.Click它调用Form1 中Button1 的Click 方法4第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.1.3 关键字,保存字关键字,保存字5第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.1.4 标签标签标签是一个不超过4 位的阿拉伯数字序列,也就是从0 到9999,打头的0 没有意义.标签用于goto 语句中。3.1.5 常量字符串常量字符串常量字符串常量字符串character string也称为文字串也称为文字串string litera

5、l或串常量或串常量string const,它由引用串,它由引用串由一对单引号括起来的文字串、控制串控制符由一对单引号括起来的文字串、控制串控制符构成的串或这两种串的组合而构成。只有引用串构成的串或这两种串的组合而构成。只有引用串可以包含分隔符。可以包含分隔符。BORLAND BORLAND Youll see Youll see 空串 一个空格#89#111#117就相当于引用串 You6第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.2 注释和编译器指示字注释将被编译器忽略,除非它们用作分隔符或编译器注释将被编译器忽略,除非它们用作分隔符

6、或编译器指示字。指示字。有以下几种方式创立注释:有以下几种方式创立注释:由一对花括号所包含的文字构成注释由一对花括号所包含的文字构成注释(*(*由左圆括号加一个星号和一个星号加右圆括号之由左圆括号加一个星号和一个星号加右圆括号之间的文字也构成注释间的文字也构成注释*)*)/由两个斜杠开始直到这一行的结束,这里的文字由两个斜杠开始直到这一行的结束,这里的文字是注释是注释假设假设$符紧跟在符紧跟在 或或(*(*之后,那么这里的注释是编之后,那么这里的注释是编译器指示字。例如译器指示字。例如$WARNINGS OFF$WARNINGS OFF它告诉编译器不要产生警告信息。它告诉编译器不要产生警告信息

7、。7第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.3 Expressions表达式表达式表达式是一个有返回值的语句构造。比方,X 变量 X 变量地址 15 整数常量InterestRate 变量 Calc(X,Y)函数调用X*Y X和Y 的乘积 Char(48)类型转换X=1.5 布尔 C in Range1 布尔not Done 布尔的否 a,b,c 集合Z/(1-Z)Z 和(1-Z)的商8第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言运算符运算符运算符就像Object Pascal 的内

8、置函数,它是语言的一局部。运算符包括:not */div mod and shl shr as+-or xor=in 和is。、not 和 是一元运算符使用一个运算数,+和-或者是一元的,或者是二元的,其它所有运算符为二元运算符使用两个运算数。除了 运算符,它在运算数的后面比方,P,其它一元运算符总是位于运算数的前面比方,-B。二元运算符位于运算数的中间比方,A7。一些运算符的行为因为传给它们的数据类型不同而不同。比方,not 运算符用于整数时,是对它的位进行求反运算,而对布尔类型进行逻辑非运算。这类运算符会在后面的多个分类中出现。除了,is 和in,其它运算可应用在Variant 类型上。9

9、第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言运算符 运算 运算数类型 返回类型 例子 +加 整数实数 整数实数 X+Y-减 整数,实数 整数,实数 Result-1 *乘 整数,实数 整数,实数 P*InterestRate /实数除 整数,实数 实数 X/2div 整数除 整数 整数 Total div UnitSizemod 余数 整数 整数 Y mod 6+正 整数,实数 整数,实数 +7-负 整数,实数 整数,实数 -X算术运算符算术运算符10第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语

10、言言算术运算符规那么算术运算符规那么不管x 和y 的类型是什么,x/y 的结果总是扩展类型;对其它运算符,只要有一个运算数是实数类型,它的结果就是扩展类型;另外,只要有一个运算数是Int64 类型,它的结果就是Int64类型;否那么,结果就是整数类型。如果一个运算数是整数的子界类型,它就像整数类型一样被对待。x div y 的值取整数,也就是取得x/y 的值,然后以0 的方向取得最近的整数。mod 运算返回对运算数进行整数除后得到的余数。换句话说,就是x mod y=x-(x div y)*y。假设y 为0 的话,表达式x/y、x div y 和x mod y 将发生运行时错误。11第第三三章

11、章 O Ob bj je ec ct t P Pa as sc ca al l语语言言布尔运算符布尔运算符运算符 运算 运算数类型 结果类型 例子Not 否 布尔 布尔 not(C in MySet)and 与 布尔 布尔 Done and(Total 0)Or 或 布尔 布尔 A or BXor 异或 布尔 布尔 A xor Bx and y 形式的表达式,当且仅当形式的表达式,当且仅当x 和和y 都为都为True时,它的结果才为时,它的结果才为True。布尔运算符规那么布尔运算符规那么12第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言运算符

12、 运算 运算数类型 返回类型 例子+并集 集合 集合 Set1+Set2 差集 集合 集合 S T*交集 集合 集合 S*T=小于等于子集集合 布尔 Q=大于等于超集 集合 布尔 S1=S2=等于 集合 布尔 S2=MySet 不等于 集合 布尔 MySet S1In 成员关系 序数,集合 布尔 A in Set1集合运算符集合运算符13第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言以下规那么适用于以下规那么适用于+、和和*运算符:运算符:当且仅当序数集合根底类型中的一个值当且仅当序数集合根底类型中的一个值O O 属于集合属于集合X X 或或集

13、合集合Y Y或同时属于或同时属于X X 和和Y Y时,时,O O 属于属于X+YX+Y;当且仅当;当且仅当O O 属属于于X X 但不属于但不属于Y Y 时,时,O O 属于属于X YX Y;当且仅当;当且仅当O O 同时属于同时属于X X 和和Y Y时,时,O O 属于属于X*YX*Y。+、和和*的运算结果属于集合类型的运算结果属于集合类型set of A.Bset of A.B,这里,这里A A 是是结果中的最小序数,结果中的最小序数,B B 是结果中的最大序数。是结果中的最大序数。以下规那么适用于以下规那么适用于=、=、和和in in 运算符:运算符:?只有当只有当X X集合中的每个成员

14、也是集合中的每个成员也是Y Y集合中的成员时,集合中的成员时,X=Y X=W Z=W 等同于等同于W=ZW=Z;只有当;只有当U U集合和集合和V V集合正好拥有相同的成员时,集合正好拥有相同的成员时,U=V U=V 才为真,否那么才为真,否那么U U V V为真;为真;?对于序数对于序数O O 和集合和集合S S,只有当,只有当O O 是是S S 的一个成员的一个成员时,时,O in S O in S 才为真。指针一样,只有当才为真。指针一样,只有当C C 和和D D 指向同一个实指向同一个实例对象时,例对象时,C=D C=D 为真,否那么为真,否那么C D C D 为真;当用于类为真;当用

15、于类引用时,只有当引用时,只有当C C 和和D D 表示同一个类时,表示同一个类时,C=D C=D 为真,否那为真,否那么么C D C D 为真。为真。14第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言类运算符类运算符as 和和is 运算符使用类和对象实例作为运算数,运算符使用类和对象实例作为运算数,as 也用也用于接口类型于接口类型运算符 运算符返回一个变量、函数、过程或方法的地址,也就是说,运算符构建一个指向运算数的指针。下面的规那么适用于 运算符:?假设X 是一个变量,X 返回X 的地址。假设默认的编译器指示字$T 在起作用,那么X 的类

16、型是Pointer通用指针;在$T+状态下时,X 的类型是T,这里T 是X 的类型;?假设F 是一个例程一个函数或过程,F 返回F 的入口点,F 的类型总是Pointer;?当 作用于类的方法时,必须使用类名来限定方法名。比方它指向TMyClass 的DoSomething 方法。15第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言运算符优先级运算符优先级运算符 优先级,not 第一级最高*,/,div,mod,and,shl,shr,as 第二级+,or,xor 第三级=,=,in,is 第四级最低16第第三三章章 O Ob bj je ec

17、ct t P Pa as sc ca al l语语言言集合构造器语法:item1,.,itemn 这里,每个item 或者是表示集合根底类型中的一个有序值表达式,或者是由两个点.连接起来的一对这样的值表达式。假设一个条目item是x.y 的形式,它是从x 到y 范围间包括x 和y所有的有序值的简写。但假设x 比y 大,那么x.y 不表示任何内容,x.y是空集。集合构造器 表示空集,而x表示一个集合,它仅有的一个成员是x 值。red,green,MyColor1,5,10.K mod 12,23A.Z,a.z,Chr(Digit+48)17第第三三章章 O Ob bj je ec ct t P

18、Pa as sc ca al l语语言言3.3.2 类型转换强制类型转换临时改变一个表达式的类型。强制类型转换临时改变一个表达式的类型。比方,比方,Integer(A)Integer(A)把一个字符把一个字符A A 转换为一个整数。转换为一个整数。强制类型转换的语法是强制类型转换的语法是typeIdentifier(expression)typeIdentifier(expression)假设表达式是一个变量,结果被称为变量转换;否那么,假设表达式是一个变量,结果被称为变量转换;否那么,结果是一个值转换。虽然它们的语法相同,但它们有不结果是一个值转换。虽然它们的语法相同,但它们有不同的转换规那

19、么。同的转换规那么。变量转换变量转换 Integer(A)不能出现在赋值语句的左边。不能出现在赋值语句的左边。值转换:值转换:占用的内存相同,可以把任何变量转换为任何类型,变量转换可出现在赋值语句的任何一边,同时可以把变量转换为过程类型。18第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.4 数据类型、变量和常量类型在本质上是一种数据的名称。当声明一个变量时,必须指定它的类型;类型决定了它的取值范围和可以进行的操作运算。每个表达式返回一个特定类型的值,函数也是如此;大多数函数和过程要求指定类型的参数。Object Pascal 是一种强类型语

20、言,也就是说,它对各种数据类型加以区分,并且不总是允许你用一种数据类型替代另一种。这通常是有好处的,因为它使编译器能聪明地处理数据并且更深入地验证你地代码,可以防止产生难于调试的运行时错误。但当你需要更多灵活性的时候,也有方法可以绕过强类型限制,它们包括强制类型转换typecasting、指针、变体类型Variant、记录中的变体局部Variant partsin records和绝对地址变量。19第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言有序类型和实数类型一、有序类型整数、字符、布尔、枚举和子界类型有次序的数值集合,除了它的第一个值以外,

21、其它每个值都有一个唯一的前驱值;除了最后一个外,其它每个值都有一个唯一的后继值。并且,每个值都有一个序数决定它在这个类型中的位置。对整数类型,一个值的序数为它本身的值 子界类型保存它们的根底类型的序数值 对其它有序类型,默认情况下,第一个值的序数为0,下一个为1,依此类推。声明一个枚举类型时,可明确地覆盖默认值。20第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言1、整数类型表示所有数字的一个子集。一般整数类型是Integer 和Cardinal21第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言2

22、、字符类型根本字符类型是AnsiChar 和WideChar。AnsiChar 是8 位字符集,它们将依照本地字符集的顺序排列,这可能是多字节的。AnsiChar 原先是根据ANSI 字符集建立的,但现在扩展为可以指定本地字符集。WideChar 使用多于一个字节来表示每个字符。在当前实现中,WideChar 依据Unicode 字符集要意识到它的实现将来可能会改变,使用一个字的宽度16-bit来存储字符。开头的256 个Unicode 字符对应于ANSI 字符。一般字符类型是Char,它相当于AnsiChar。一个长度为1 的字符串常量,比方A,可以表示一个字符。内置函数Chr,返回一个在A

23、nsiChar 或WideChar取值范围内任意一个整数的字符值。比方,Chr65返回字母A。22第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3、布尔类型Boolean 类型的变量占据一个字节,Boolean 值由内置的常数True 和False 来表示。布尔表达式不能和整数或实数进行换算。所以,假设X 是一个整数变量,语句if X then.;会产生编译错误。把这个变量强制转换为布尔类型也是不可取的,但下面的用法可以正常工作:if X 0 then.;use longer expression that returns Boolean va

24、lue var OK:Boolean use Boolean variable.if X 0 then OK:=True;if OK then.;23第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言5、枚举类型枚举类型定义一个有次序的值的集合,定义语法为:type typeName=(val1,.,valn)例如:例如:Type TSound=(tsClick,tsClack,tsClock);Answer=(ansYes,ansNo,ansMaybe);在声明变量时,可以直接使用val1,valn结构,它就像一个类型名称:var MyCard:

25、(Club,Diamond,Heart,Spade);但在声明了但在声明了MyCard以后,就不能再同时声明以下语句了:以后,就不能再同时声明以下语句了:var Card1:(Club,Diamond,Heart,Spade);但可以这样:但可以这样:var Card1,Card2:(Club,Diamond,Heart,Spade);24第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言6、子界类型子界类型表示其它有序类型称为根底类型的一个子集:它的形式为Low.High。这里,Low 和High是同一种有序类型的常量表达式,并且,Low 比Hi

26、gh 要小。以上面的形式,就定义了一个子界类型,它包括Low 和High 之间的所有值。比方,假设你声明枚举类型:type TColors=(Red,Blue,Green,Yellow,Orange,Purple,White,Black);你就可以这样定义一个子界类型:type TMyColors=Green.White;这里,TMyColors 就包含值Green、Yellow、Orange、Purple 和White。25第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言二、实数类型实数类型定义了一类可以用浮点表示的数字一般实数类型为Real,

27、在当前实现中,它相当于Double。Currency 类型有固定的小数点,可以把在货币运算中出现的错误减到最少Extended 类型比其它实数类型有更高的精度,但不够轻巧。当使用Extended 类型创立的文件要跨平台共享时,务必小心。26第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.4.2 字符串类型字符串表示一个字符序列在赋值语句和表达式中,字符串类型可以混合使用,编译器自动进行所需的转换。但对于过程或函数,当使用引用方式传递字符串时,类型必须正确。字符串可明确地被转换为其它类型的字符串。关键字string 用起来就像一个一般类型名,例

28、如var S:string;声明一个变量S,它保存字符串类型。在默认的$H+状态下,编译器把string当它的后面没有包含数字的中括号时解释为AnsiString;使用$H-指示字把它解释为ShortString。27第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言Length 返回一个字符串的字符个数;SetLength 设置一个字符串的长度;UpCase 函数把字符串转换为大写;Downcase函数把字符串转换为小写。字符串比较。是比较它们对应位置上的字符大小顺序。对长度不等的字符串,较长字符串上多余的字符被认为较大假设前面没有比较出大小。例

29、如,AB比A大,零长度的字符串有最小值。字符串索引。假设S 是一个字符串变量,i 是一个整数表达式,那么Si表示S 中第i 个字符或者,严格说来,是第i 个字节。对于ShortString 或AnsiString,Si是AnsiChar 类型;对于WideString,Si是WideChar 类型。语句MyString2:=A;把值A 赋给MyString 的第2 个字符。28第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言ShortString 可包含0 到255 个字符。它的长度能动态改变,它被静态分配256 字节的内存:第1 个字节存储串的

30、长度,剩下的255 个字节存储字符。2、长字符串1、短字符串AnsiString 类型又称为长字符串,它可以动态分配,并且长度只受内存限制。3、宽字符串WideString 类型是动态分配的、由16 位Unicode 字符所构成的字符串。在大多数方面,它和AnsiString相似。注:宽字符串没有引用计数,不支持copy-on-write 机制,但支持内存动态分配。29第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言该类型指向一个以0 结尾的Char 或WideChar 字符数组const TempString:array0.12 of Char

31、=Hello world!#0;var P:PChar;.P:=TempString;注:和注:和P:=TempString 相同相同4、Pchar30第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言结构类型的一个实例可包含多个值。结构类型包括集合、数组、记录,也包括类、类引用class-reference和接口类型。除了集合只能包含有序值以外,结构类型可以包含其它的结构类型,且结构的层次不受限制。31第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言一、一、集合集合是同一种有序类型的值的聚集,它们包

32、含的值集合是同一种有序类型的值的聚集,它们包含的值没有内在的顺序,且不重复。没有内在的顺序,且不重复。一个集合类型的取值范围,是构成它的有序类型一个集合类型的取值范围,是构成它的有序类型称为根底类型的幂,也就是说,集合可能的值是称为根底类型的幂,也就是说,集合可能的值是根底类型的所有子集,也包含空集。根底类型可能根底类型的所有子集,也包含空集。根底类型可能的值不要超过的值不要超过256 256 个,并且它们的序数必须在个,并且它们的序数必须在0 0 到到255255之间。任何像下面的形式:之间。任何像下面的形式:set of baseTypeset of baseType声明一个集合类型,这里

33、,声明一个集合类型,这里,baseType baseType 是一个适宜是一个适宜的有序类型。的有序类型。32第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言typeTSomeInts=1.250;TIntSet=set of TSomeInts;通过子界类型声明集合类型。同样可以声明:同样可以声明:type TIntSet=set of 1.250;声明变量:var Set1,Set2:TIntSet;或者直接构造:var MySet:set of a.z;运算符in 判断集合的成员关系:if a in MySet then.do someth

34、ing 每个集合类型可包含空集,用 来表示。33第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言二、二、数组一个数组是由相同类型的称为根底类型、经过索引的元素组成的聚集。因为每个元素有唯一的索引,所以,数组和集合不同,它可以包含多个相同的值。数组可以静态分配内存,也可以动态分配。1、静态数组静态数组静态数组类型以下面的格式声明:arrayindexType1,.,indexTypen of baseType2、动态数组动态数组没有固定大小和长度,相反,当你给它赋值或把它传给SetLength 函数时,它的内存被重新分配。动态数组以下面的形式声明:

35、array of baseType调用SetLength,分配内存34第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言要声明多维动态数组,使用复合array of.结构,比方,type TMessageGrid=array of array of string;var Msgs:TMessageGrid;声明一个二维字符串数组。要实例化这个数组,应用两个整数参数调用SetLength。比方,假设I 和J 是整数变量,SetLength(Msgs,I,J),给它分配内存4 4、数组类型和赋值、数组类型和赋值只有数组是相同类型时,它们才是赋值兼容。v

36、ar Int1,Int2:array1.10 of Integer;或type IntArray=array1.10 of Integer;varInt1:IntArray;Int2:IntArray;这样:可以:Int1:=Int2;3 3、多维动态数组、多维动态数组35第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言三、记录记录类似于其它语言中的结构表示不同种类的元素的集合,每个元素称为“字段,声明记录类型时要为每个字段指定名称和类型。声明记录的语法是type recordTypeName=recordfieldList1:type1;.fi

37、eldListn:typen;end这里,recordTypeName 是一个有效标志符,每个type 表示一种类型,每个fieldList 是一个有效标志符或用逗号隔开的标志符序列。36第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言typeTDateRec=record Year:Integer;Month:(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);Day:1.31;end;TDateRec 包含3 个字段:一个整数类型的Year,一个枚举类型的Month,另一个子界类型的Day。它们

38、的行为就像变量。在实例化时才进行内存分配:var Record1,Record2:TDateRec;用记录名作限定符、通过字段名来访问字段,并直接赋值。Record1.Year:=1904;Record1.Month:=Jun;Record1.Day:=16;赋值:Record2:=Record1;37第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.4.4 指针类型语法:type pointerTypeName=type类型PChar 表示一个指向Char 的指针38第第三三章章 O Ob bj je ec ct t P Pa as sc c

39、a al l语语言言过程类型定义:Function FunctionName(Para1,Para2:BaseType):BaseType访问:Var Fname Function(Para1,Para2:BaseType):BaseType直接:Fname=FunctionName方法:只取过程或函数头heading并把procedure 或function 后面的标志符去掉,剩下的就是过程类型的名称。例如:例如:typeTIntegerFunction=function:Integer;varF:TIntegerFunction;F 是一个无参数、返回整数值的函数procedure Fun

40、cProc(P:TIntegerFunction);FuncProc 是一个过程,它的参数是一个无参数、返回整数值的函数39第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言typeTNotifyEvent=procedure(Sender:TObject)of object;TMainForm=class(TForm)procedure ButtonClick(Sender:TObject);.end;varMainForm:TMainForm;OnClick:TNotifyEvent我们就可以进行下面的赋值:OnClick:=MainForm.

41、ButtonClick;两个过程类型是兼容的:相同的调用约定,相同类型的返回值或没有返回值,并且具有 相同数目的参数,并且相应位置上的类型也相同参数名无关紧要40第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.4.6 变体类型(Variant types)它们的类型是可变的,或者在编译时它们的类型不能确定,它们可以在运行时改变类型。所有的整数、实数、字符串、字符和布尔类型与Variant 是赋值兼容的。例如:varV1,V2,V3,V4,V5:Variant;beginV1:=1;整数值V2:=1234.5678;实数值V3:=Hello w

42、orld!;字符串V4:=1000;字符串V5:=V1+V2+V4;实数值2235.5678end;表达式中的VariantVariant 数组41第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.4.7 变量(Variables)变量是一个标志符,它的值能在运行时改变。从另一个角度看,变量是内存中某个位置的名称,你能使用这个名称读取或写入内存中的这个位置。因为它们是有类型的,它们也就告诉了编译器如何解释它们存储的数据。变量-数据的容器声明语法为:声明语法为:var identifierList:type;identifierList 是由逗号

43、隔开的有效标志符的列表,type 是任何有效类型例如:varX,Y,Z:Double;I,J,K:Integer;Digit:0.9;Okay:Boolean;42第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.4.8 声明的常量一、一、True constants真常量真常量真常量是一个声明的标志符,它的值不能更改。语法:语法:const identifier=constantExpression二、二、Constant expressions常量表达式常量表达式常量表达式是一个表达式,编译器不用执行程序就能计算出它的值。常量表达式包括:常

44、数、字符串常量;真常量;枚举类型的值;特殊常量True、False 和nil;以及由以上类型的元素通过运算符、类型转换和集合构造器构成的表达式。常量表达式不能包括变量、指针或函数调用。三、资源字符串资源字符串被当作资源链接到可执行文件或库中,因此,不用重新编译程序就能修改它们,资源字符串的声明像真常量,除了用resourcestring 代替const。resourcestringCreateError=Cannot create file%s;43第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言五、数组常量const Digits:array0

45、.9 of Char=(0,1,2,3,4,5,6,7,8,9);六、六、过程常量function Calc(X,Y:Integer):Integer;begin.end;type TFunction=function(X,Y:Integer):Integer;const MyFunction:TFunction=Calc;44第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言六、记录常量typeTPoint=recordX,Y:Single;end;TVector=array0.1 of TPoint;TMonth=(Jan,Feb,Mar,Ap

46、r,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);TDate=recordD:1.31;M:TMonth;Y:1900.1999;end;constOrigin:TPoint=(X:0.0;Y:0.0);Line:TVector=(X:-3.1;Y:1.5),(X:5.8;Y:3.0);SomeDay:TDate=(D:2;M:Dec;Y:1960);45第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言3.5 过程和函数自包含的语句块,能在程序的不同地方调用。函数在在执行时能返回一个值,而过程不能。3.5.1 声明过程和函数过

47、程声明procedure procedureName(parameterList);directives;localDeclarations;beginstatementsend;这里,procedureName 是任何有效标志符;statements 是一系列语句,当调用过程时它们被执行;(parameterList)、directives;和localDeclarations 是可选的。46第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言函数声明function functionName(parameterList):returnType;d

48、irectives;localDeclarations;beginstatementsend;这里,functionName 是任何有效标志符,returnType 是任何类型,statements 是一系列语句,当调用函数时它们被执行;(parameterList)、directives;和localDeclarations 是可选的。函数名本身也扮演一个特殊的变量,它内置的变量Result 存储函数的返回值。function WF:Integer;beginResult:=17;end;47第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言调用

49、约定register、pascal、cdecl、stdcall、safecall调用约定决定了参数被传递给例程的顺序,它们也影响从堆栈中删除参数、传递参数时存放器的使用,以及错误和异常处理。默认的调用约定是register。register 和pascal 调用从左到右传递参数,也就是说,最左边的参数最早被计算并传递,最右边的参数最后被计算和传递;cdecl、stdcall 和safecall 调用从右到左传递参数;除了cdecl 调用,过程和函数在返回之前从堆栈中移除参数,而使用cdecl,当调用返回时,调用者从堆栈中移除参数;register 调用能使用多达3 个CPU 存放器传递参数,而

50、其它调用那么全部使用堆栈传递参数;safecall 调用实现了异常“防火墙,在Windows 下,它实现了进程间COM 错误通知。当调用外部代码时,推荐使用stdcall 和safecall。在Windows 中,系统API 使用stdcall 和safecall48第第三三章章 O Ob bj je ec ct t P Pa as sc ca al l语语言言External 声明声明在声明过程或函数时,用在声明过程或函数时,用external 指示字取代例程块,能允许指示字取代例程块,能允许你调用和程序分开编译的例程。外部例程可以来自目标文件或你调用和程序分开编译的例程。外部例程可以来自目

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文献 > 管理手册

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com