版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ObjectPascal语言基础2.1基本概念
Delphi7.0是一个基于ObjectPascal语言的Windows应用程序开发系统,在所有的事件处理过程和应用程序中都是使用它来编写程序代码。ObjectPascal编程语言是在Pascal语言的基础上发展起来的,它继承了Pascal语法严谨、数据结构丰富等优点,同时融入了面向对象编程的语法要素,使之成为一种优秀的面向对象编程语言。2.1.1保留字
首先介绍ObjectPascal语言的最基本内容:保留字和标志符。保留字(ReservedWords)是由系统规定的、具有特定意义的单词。在编程时不能被重新定义或另作他用。ObjectPascal语言规定的保留字有65个,详见本教程P23页表2-1。
除了上述的保留字外,Private、Protected、Public、Published和Automated在定义对象类型时也作为保留字,而在其他场合则作为指令符。单词at和on也具有特殊的含义。
注意:ObjectPascal编程语言和许多编程语言不同,它对单词的大小写是不敏感的。ObjectPascal不区分大小写。IN、in和In都被看做是同样的意义。2.1.2标识符
标识符是ObjectPascal语言中用来表示应用程序量的名称。包括:变量(Var)、常量(Const)、类型(Type)、过程(Procedure)、方法(Method)等。标识符分为标准标识符和自定义标识符两类。
标准标识符是ObjectPascal语言系统预先分配给标准常量、标准类型、标准函数、标准过程及标准文件使用的标识符。如标准常量:False、True;标准类型:integer、char、real;标准函数:Abs、Sqr、Cos等。自定义标识符是程序员根据需要为自己定义的常量、变量、类型、函数、过程以及所编写的程序名等。ObjectPascal标识符由字母、数字、下划线组成,其规定为:(1)必须以字母或下划线开始;(2)不能与保留字相同;(3)避免与ObjectPascal已经使用的标准标识符相同。2.1.3指令符
指令符(directives)也是具有特殊意义的单词,但与保留字不同的是可以将指令符定义为标识符,ObjectPascal不会指示出错,但这容易混淆。ObjectPascal规定的指令符见表2-2。absoluteabstractassemblerautomatedcdcelcontainsdefaultdispiddynamicexportexternalfarforwardimplementsindexmessagenamenearnodefaultoverloadoverridepackagepascalprivateprotectedpublicreadreadonlyregisterretroducerequiresresidentsafecallstdcallstoredvirtualwritewriteonly表2-2ObjectPascal语言规定的指令字2.2数据类型
描述客观事物的数、字符以及所有能输入到计算机中并被计算机程序加工处理的符号的集合称为数据。数据的一个重要特征就是其所属的数据类型,数据类型不仅确定了该类数据的表示形式和取值范围,而且还确定了数据所能够参加的各种运算。ObjectPascal提供了多种数据类型,包括标准数据类型和高级数据类型。标准数据类型属于ObjectPascal内部约定的数据类型,无需定义就可以直接使用。标准数据类型有整型(Integer)、实型(Real)、字符型(Character)、字符串型(String)、布尔型(Boolean)五种。高级数据类型体现了特殊的数据结构,在使用之前必须由用户自己进行定义。高级数据类型有枚举型(Enumerated)、子界型(Subrange)、集合类型(Set)、数组类型(Array)、记录类型(Record)文件类型(File)、类类型(Class)、类引用类型(ClassReference)、接口类型(Interface)、指针类型(Pointer)、过程类型(Procedural)、可变类型(Variant)。2.2.1整型
整数包括正整数、负整数和零。整型是存储整数数据的类型。ObjectPascal包括9种形式的整型数据,详见本教程P25页表2-3。
前2种为一般整型,后7种为基本整型,应尽量使用Integer、Cardinal两种基本类型,因为它们在各种CPU和操作系统中都提供最佳的性能。通常,作用于整数的算术运算符返回Integer类型的值。在当前执行中,等价于32位的长整型(LongInt)。仅当对Int64类型执行运算时,运算结果返回Int64类型。因此,下面的代码执行后得到的结果是不正确的:vari:Integer;j:Int64;...i:=High(Integer);//取Integer类型中的最大值j:=i+1;要使返回值是Int64类型,在上面的情况中可以将
i转换为Int64。代码如下:...j:=Int64(i)+1;2.2.2实型
实数是最常用的数据类型。在ObjectPascal中实数有两种表示方法:小数表示法和科学计数法。例如:-3.6,2.4e0,–1.2e-5,3E7
小数表示法与日常数学中所用表示方法相同。科学计数法中,e之前表示有效数字,e之后数字表示10的幂。即–1.2e-5=(-1.2)×10-5=-0.000012
需要注意的是小数表示法中小数点前后都必须有数字,科学计数法中e前后都必须有数字,e可以大写成E。实型是存储实数数据的类型。ObjectPascal包括5种形式的实型数据,详见本教程P26表2-4。
(图1-2)
前六种为基本数据类型,Real为一般实型。最常用的实型是Real类型,它与Double等价。Currency是专为处理货币而设计的,该类型与其他实型进行运算时,Delphi自动将结果转化为Currency类型。2.2.3字符型
字符型是存储单个字符的类型。ObjectPascal包括3种形式的字符型数据,详见表2-5。基本字符类型是AnsiChar和WideChar。AnsiChar的尺寸是一个字节(8位),其值参照本地字符集。AnsiChar最初模仿ANSI字符集,但现在用于扩大到当前的本地字符集。WideChar字符用多于一个字节来表示每个字符。WideChar的尺寸是一个字(16位),其字符顺序参照Unicode字符集,Unicode字符集中的前256个字符对应ANSI字符。一般字符类型是Char,等价于AnsiChar。字符类型数据的表示方法是用两个单引号括起单个字符如:'A'、'6'、'.'。
''表示空格符。表2-5ObjectPascal语言的字符型类型名称字节数取值范围Ansi字符型AnsiChar1扩展ANSI字符集宽字符型WideChar2UniCode字符集字符型Char1(2)扩展ANSI字符集2.2.4字符串型
字符串型是存储字符串数据的类型。ObjectPascal包括4种形式的字符串型数据,详见本教程P27页表2-6。
保留字string的作用如一般类型的标识符。例如: varS:string;
创建了变量S,用于保存串。在默认的编译指示{$H+}状态下,编译器将string(后面没有跟随方括号和数字)解释为AnsiString;使用编译指示{$H-}时,解释为ShortString。
ShortString类型串的长度在0到255之间。ShortString串的长度可以动态改变,其占用的内存是静态的,总是256字节;第一个字节存储串的长度,其余255个字节存储串中的字符。
AnsiString也叫做长串(longstring),用来表示动态分配的串。
WideString类型表示16位Unicode字符的动态分配的串。WideString类型大部分的特性与AnsiString类型相似。
ObjectPascal还支持其他最大长度在0到255之间的短串。可以通过在保留字string后边附加方括号括起来的数字来表示。例如: varMyString:string[100];
创建了一个叫做MyString的变量,其最大长度为100个字符。2.2.5布尔型
布尔型数据用于进行逻辑运算,布尔型数据的值只有两个:True(真)和False(假)。ObjectPascal包括4种形式的布尔型数据,详见表2-7。Boolean类型是编程时常用的布尔类型,其他三种类型是为了兼容其他语言而设置的。Boolean类型的取值为False和True两个符号常量。在ObjectPascal中,布尔表达式不能被等同为整数或实数。因此,如果x是一个整数类型的变量,那么语句 ifxthen...;将产生一个编译错误。可以将上个语句改为: ifx=1then...;
表2-7ObjectPascal语言的布尔型类型名称字节数取值布尔型Boolean1只能为False(0)或True(1)字节布尔型ByteBool1False或True(非False)宽布尔型WordBool2False或True(非False)长布尔型LongBool4False或True(非False)2.2.6序数类型1.序数类型
序数类型包括整数、字符、布尔、枚举、子界等类型。序数类型定义了一个有序的值的集合。集合中的每个值(除第一个)都有一个唯一的前驱值,每个值(除最后一个)都有一个唯一的后继值。对于第一个序数的前趋和最后一个序数的后继在此不做讨论。此外,每个值都有一个序号,类型中的序号决定值在类型中的顺序。大多数情况下,如果一个值的序号为n,那么它的前驱值的序号为n–1,后继值的序号为n+1。
2.序数函数(1)序数函数Ord()返回数据的序数。例如:Ord(6)的返回值为6,表示整数6的序数是其本身。(2)前趋函数Pred()返回数据的前趋值。例如:Pred('e')的返回值为'd',表示字符e的前趋是字符d。(3)后继函数Succ()返回数据的后继值。例如:Succ(False)的返回值为True,表示布尔型数据True是False的后继。(4)首序数函数Low()返回序数类型的数据中序数最小的一个数据。(5)末序数函数High()返回序数类型的数据中序数最大的一个数据。2.3常量与变量
在程序设计中常用到两种形式的数据,一种是在程序执行过程中其值保持不变的数据,称为常量;另一种是在程序执行过程中其值可以改变的数据,称为变量。
常量是一种在程序执行进程中其值保持不变的数据。根据使用的方式不同,程序中的常量分为直接常量、真实常量与类型常量。2.3.1常量1.直接常量直接常量是指在程序中直接引用的整数、实数、字符、字符串或其他不同类型的常数。下列常数均属于直接常量。(1)带有正负号的整数或无符号的整数,如:-1,+2,2003,0。(2)实数,包括定点实数与浮点实数两种表示形式。定点实数即小数形式,如:0.03,-32.48,+102.9,0.0。浮点实数即指数形式,如:+2.56E-5,-1.2E+8,3.2E12。2.3.1常量(2)2.真实常量真实常量是指一个被声明的标识符,它的值不能改变。如果在一个程序中,某一个常数反复多次出现可以定义一个标识符来代表该常数。定义常量时使用常量说明语句,语法格式为:const<常量名1>=<常量值1>…<常量名n>=<常量值n>
其中const是ObjectPascal的保留字,表示常量定义的开始。<常量名>即常量的标识符,<常量值>是直接常量或常量组成的表达式。例如:constPI=3.1415926;K=PI/180;
不能在程序中给常量另行赋值,否则会导致语法错误。(3)字符,由单撇号括起来的单个字符,如:'a','C','6','+'。(4)字符串,由双撇号括起来的字符串,如:"hello","abc123","3.234"。(5)布尔型常数,只有两个值True和False。2.3.1常量(3)3.类型常量类型常量不同于真实常量,它能保存数组、记录等高级数据类型的值。定义类型常量的语法格式如下:
const <常量名>:<类型名>=<常量值>;例如:constHello:string='Hello';Max:Integer=100;Digits:array[0..9]ofChar=('0','1','2','3','4','5','6','7',‘8’,‘9’);//定义了一个常量用于保存数组在缺省的编译状态{$J-}中,类型常量不能被赋予新的值,这时的类型常量相当于只读变量。然而,如果编译指示{$J+}有效,那么类型常量可以被赋予新的值,这时的类型常量相当于被初始化过的变量。
变量是程序代码中代表一个内存地址的标识符,而此地址的内存内容在程序代码执行时可以被改变。在使用变量前必须对它进行说明,即对它进行命名,并说明它的类型。变量就像数据容器,而且由于变量被定义了类型,只能用于储存与其定义类型相兼容的数据。2.3.2变量(1)变量有如下三个主要特征。(1)变量名:即变量的标识符,用于对所代表的内存单元的引用。(2)类型:变量的类型决定了变量中所存放数据的范围、有效的操作、存储空间的大小和格式。(3)变量值:变量所代表的内存单元中的数据值。程序中的变量必须先声明才能使用。1.变量的声明变量在单元、函数或过程的声明部分进行声明,声明位置决定了变量的作用范围。变量声明的格式为:2.3.2变量(2)
声明多个同类型的变量时可采用如下格式:
var<变量名1>…<变量名n>:<类型名>
其中var是ObjectPascal的保留字,表示变量定义的开始,<变量名>可以是任意合法的标识符,<类型名>可以是ObjectPascal的基本数据类型也可以是由用户定义的高级数据类型。声明在过程或函数内部的变量有时叫做局部变量,而在应用程序开始声明的变量叫做全局变量。全局变量可以在声明时对它进行初始化,格式为:
var<变量名>:<类型名>=<常量表达式>
其中常量表达式的值必须与变量定义的类型相兼容。var<变量名1>:<类型名1>…<变量名n>:<类型名n>2.变量使用
变量经过声明之后,就可以在程序中使用了,通常可以通过赋值语句给变量赋值。如果没有明确初始化全局变量,那么编译器将对其初始化为0。不同的是,局部变量不能在其声明中被初始化并且在其被赋值之前包含的是随机数据。一旦声明了一个变量,应及时对它赋值进行初始化,未经初始化的变量的值是一个不确定的随机数,如果该变量参与运算或是出现程序流程中将会产生意想不到的后果。初始化变量的最简单方法就是给变量赋值。2.3.2变量(3)2.4运算符与表达式
运算是对数据进行加工处理的过程,描述各种不同运算的符号称为运算符,而参与运算的数据称为操作数。表达式是表示某个求值规则的运算公式,它由运算符和圆括号将常量、变量等操作数以合理的形式组合而成。表达式可以用来执行运算、操作或测试数据,每个表达式都会产生惟一的值。表达式的类型由运算符的类型决定。在ObjectPascal中有以下几种运算符:算术运算符、位运算符、字符串运算符、关系运算符、布尔运算符、集合运算符、指针运算符、类运算符和@运算符。本章中先介绍几种常用的运算符。1.算术运算符
ObjectPascal有8个算术运算符,在这8个算术运算符中,除取正“+”、取负“-”是单目运算符外,其他均为双目运算符,详见本教程P31页表2-8。其中+、-、*运算的含义与数学中的相同,参加运算的数可以是整型也可以是实型,结果由Delphi7.0自动向精度高的数据类型转化。参加除法运算“/”的数无论是整型或是实型,结果都是实型。参加整数除法“div”和求余运算“mod”的数必须是
2.4.1算术运算符2.4.1算术运算符
2.算术表达式算术表达式是由算术运算符、数值型常量、变量、圆括号组成,其运算结果为一数值。 例如:3*4+(90-5)/4*2的值为54.5。在书写算术表达式时应当注意以下两点:(1)在数学中可以省略乘号,但在算术表达式书写中不可以省略,如在数学中相乘可以写成2x,但在编程中必须写成2*x;(2)所有括号都用小括号(),括号必须配对,例如数学式3[x+(y-z)]在编程中必须写成3*(x+(y-z))。整型,结果也是整型,分别是除法的商和余数。在表达式a/b、adivb、amodb中,如果b的值为0将会触发一个错误。 例如:10mod3的值为1,10div3的值为3。2.4.2位运算符
位运算符是指对操作数进行的按位逻辑运算。其运算对象是整数,运算结果也是整数,ObjectPascal有6个逻辑运算符,详见表2-9。and、or、not和xor运算符当运算符两侧为数值数据,则将数值数据转换为二进制数(补码形式)进行按位运算。设x值为3,y值为5,在内存中按二进制保存,即x,y值分别为00000011,00000101。按位计算结果如下:notx的值为 11111100(十进制数–4)xandy的值为 00000001(十进制数1)xory的值为 00000111(十进制数7)xxory的值为 00000110(十进制数6)xshl2的值为 00001100(十进制数12)xshr1的值为 00000010(十进制数2)运算符名称举例运算符取值名称举例not按位取反notxxor按位异或xxoryand按位与xandyshl左移位xshl2or按位或xoryshr右移位yshr1表2-9ObjectPascal语言的位运算符2.4.3字符串运算符ObjectPascal只有一种字符串运算符,即连接运算符“+”。该运算符用于连接两个或更多的字符串。当两个字符串用连接运算符连接起来后,第二个字符串直接添加到第一个字符串的尾部,结果是一个更长的包含两个字符串的全部内容的字符串,也可以把多个字符串连接起来,每两个字符串之间都要用“+”号分隔。例如:'abcdef'+'123'连接后结果为:'abcdef123''abc'+'123'+'xyz'连接后结果为:'abc123xyz‘
加号(+)运算符对串的操作与其对数字的操作有很大差异。对于数字a、b,表达式a+b与b+a是等价的,对于字符串s1、s2表达式s1+s2与s2+s1不是等价的。例如,当s1为'hello'、s2为'world'时,s1+s2返回的值是'helloworld',而s2+s1返回的值是'worldhello'。也就是说,当加号(+)作为字符串运算符时,操作数的位置顺序直接影响运算结果。2.4.4关系运算符
关系运算符又称为比较运算符,用来对两个表达式的值进行比较,比较的结果是一个布尔值(True或False)。关系表达式是指用关系运算符将两个表达式连接起来的式子。ObjectPascal提供的关系运算符有9种,详见表2-10。表2-10ObjectPascal语言的关系运算符运算符名称举例运算符取值名称举例=等于4=5值为False>大于4>5值为False<>不等于4<>5值为True<=小于或等于4<=5值为True<小于4<5值为True>=大于或等于4>=5值为False
关系运算符两侧可以是数值表达式、字符型表达式或其他表达式,也可以是常量、变量或函数,但其两侧的数据类型必须是相容的标准数据类型或顺序类型。各关系运算符的运算级别相同。运算次序为:先分别求出关系运算符两侧表达式的值,然后再把两者的值进行比较,两者的关系若与关系运算符指示的一样,则关系运算的结果为真(True),否则结果为假(False)。数值型数据按其数值大小进行比较;字符型数据按其ASCII码值进行比较,比较字符串时先比较第一个字符,其中ASCII码值较大的字符所在的字符串大。若第一个字符相同时比较第二个字符,…以此类推。顺序类型数据的比较按照其序数进行比较。2.4.5布尔运算符
在表示较为复杂的条件判断时,必须使用布尔表示式。布尔表达式是指用布尔运算符连接若干关系表达式或布尔值组成的式子,如a≤x≤b可以表示为:a<=xAndx<=b,布尔表达式的值也是一个布尔值。ObjectPascal提供4种布尔运算符,详见表2-11。表2-11ObjectPascal语言的布尔运算符运算符名称举例说明and与(4>5)and(3<4)该表达式值为False。当两个表达式的值均为真,结果才为真,否则结果为假。or或(4>5)or(3<4)该表达式值为True。两个表达式中只要有一个表达式的值为真,结果就为真,两个表达式的值均为假时结果为假。not非not(4>5)该表达式值为True。进行取“反”操作,由真变成假或由假变成真。xor异或(4>5)xor(3<4)该表达式值为True。当两个布尔表达式值不同时结果为True。2.4.6运算符的优先级
在一个表达式中进行多种操作时,ObjectPascal会按一定的顺序进行求值,这个顺序称为运算符的优先顺序。在表达式中运算符的优先级决定了运算被执行的顺序。常用运算符的优先顺序如本教程P34页表2-12所示。
当一个表达式中含有多个算术运算符时,将按优先级由高到低的顺序求值。优先级高的运算符在优先级低的运算符之前求值,优先级相同时自左向右求值,如果表达式中含有括号,则先计算括号内表达式的值,如果有多层,先计算最内层括号中的表达式。例 如表达式:
x+y*z
先运算y乘以z,然后将乘积(运算结果)与x相加;运算符*先被执行,因为它比运算符+优先。可以使用圆括号超越所有的优先级规则。圆括号中的表达式最先被求值,因此可以被视为一个单独的操作数。例如表达式:
(x>y)and(x>z)
首先判断x是否大于y,然后判断x是否大于z,最后将两次判断的结果相与,只有当x的值比y、z的值都大时此表达式的值才为true。该表达式不能书写为:
x>yandx>z
根据运算符的优先级,该表达式将解释为:
(x>(yandx))>z
若x,y,z均为实型或整型数据时将产生编译错误。圆括号通常使代码更容易读写,在编程过程中应当合理使用圆括号。2.5语句
语句是执行具体操作的指令,是由ObjectPascal的保留字、变量名、函数名及Delphi7.0编辑器可以识别的指令符号组成,建立正确的语句必须遵从ObjectPascal的语法规则。ObjectPascal程序语句书写比较自由,可以把多个语句放在一个程序行中,也可把一个语句分多行书写,但需要记住ObjectPascal的每个语句都必须以分号“;”结束。在编写自己的ObjectPascal程序时,要注意程序的可读性。Pascal语言是英式结构语言,在程序中选择合适的缩排、大小写风格,并在需要时将程序代码分行,会使得程序代码能够很容易地被自己和他人读懂。对于较为复杂的程序常用到复合语句,复合语句是指将多个语句用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年四川省内江市中考物理试题含答案
- 2011年6月21日重庆法院系统面试真题
- 福建公务员面试模拟85
- 文创项目可行性报告
- 初中生物教学中渗透心理健康教育的探索
- 2008年6月12日湖南省邵阳市面试真题
- 上海市公务员面试真题汇编15
- 黑龙江公务员面试模拟64
- 2014年04月27日下午广东省深圳市公务员面试真题
- 山东面试模拟24
- 铁路人工铺轨技术交底
- MNS技术规格书
- 富士M225打印机无线连接
- 交警高清抓拍监控系统技术方案
- 妇幼保健院急诊预检、分诊流程图
- B737-300轮舱部件图
- 各种注射法(课堂PPT)
- 中国加工贸易的发展历程与政策演变
- 新规范箱涵结构设计(单孔)
- 医师执业注册授权委托书
- 飞利浦16排螺旋CT机操作规程(1)
评论
0/150
提交评论