Delphi复习(二)ObjectPascal数据类型上
Delphi是基于ObjectPascal语言设计的,而ObjectPascal语言又是基于Pascal语言发展起来的,它拥有语法结构严谨,编译代码效率高等优点。
Delphi的注释方法有三种:
大括号注释:{ …… }之间的都是注释
小括号+星号注释:(* …… *)之间的都是注释
上面两种是块注释,还有个C++风格的行注释,仅可注释一行:// ……
注意1:不建议使用注释的嵌套使用。
注意2:当块注释的”{“或”(*“后是”$“号时,表示该句是一个编译器指令,不是普通的注释,它是对编译过程进行设置的。
Delphi命名对大小写不敏感,不过做为C++程序员,建议还是养成良好的编程规范,使用匈牙利命名法,正确的代码缩进比较好,可读性强。但是数字不可做为标识符首位,关键字不可做为标识符还是不变的。使用的是ASC2码。
1:变量声明。
和C++一样,使用变量前必须对它进行说明,它的命名,类型等
我们规范的语法是:var保留字+变量名+冒号”:”+变量类型。最后以分号结尾。
例如:
var Sum : Integer;
全局变量一般是在implementation词后进行声明,它声明时允许同时赋值。
注意:使用“=”号,而非“==”号。例如
implementation
var g_Sum : Integer = 10;
但是注意的是,局部变量不允许声明时赋值,同时声明多个全局变量时不可初始化赋值。没有初始化的情况下,全局变量会系统自动初始化.全局变量和局部变量的生存周期与C++相同,所以我们设计程序时,尽量避免使用全局变量破坏OO的封装思想。
2:常量
常量的声明不需要再指明其类型,直接用const修饰就可以了。例如
const PI = 3.1415926
MYNAME = "duzhi"
系统会默认的理解它们为实型和字符串型。
3:预定义数据类型
包括整形Integer,实型Single,布尔型Boolean,字符型Char,指针型Pointer,字符串型Pchar。
其中整形为2字节,长整Longint占4字节,短整Shortint占1字节,Byte相当于无符号短整,也占1字节,Word就是无符号整形,占2字节。
实型Single占4字节,可包含7-8位有效小数。Double占8字节,包含15-16位有效小数。
Extended站10字节,包含19-20位有效小数。Comp占8字节,包含19-20位小数部分。
指针类型Pointer可以指向任何类型。
其他和C++基本一致。
4:保留字和指令字
JAVA中有50个保留字,Pascal中有65个保留字,都是有特殊含义的,这些下面会慢慢接触到。另外还有39个指令字,也具有特殊含义。
Object Pascal的最大特点之一就是他的数据类型特别严谨,这表示我们传递给过程函数的实参和定义的形参的类型必须完全相同。如果熟悉C/C++编程环境的朋友会知道,其中经常给出一些Warning警告我们可能在参数传递时给予了类型转换,而Pascal中完全没有这种警告发生,因为OP编译器完全不允许这种情况的出现。
但是OP也的确提供了足够丰富的数据类型给我们使用,有简单数据类型,字符串数据类型,结构数据类型,指针数据类型,函数和过程数据类型,变体数据类型等。
1:简单数据类型Simple
它又分为有序数据类型Ordinal和实数数据类型Real。而有序数据类型又可分为整数类型,字符类型,布尔类型,枚举类型,子界类型等。
(1):整数类型还分为9种,无非是是否有符号,占字节数长短区别而已。在计算时,会以保全精度为首要目标进行自动数据转换。
ShortInt -128~127 8位,有正负符号标志
SmallInt -32 768~32 767 16位,有正负符号标志
LongInt -2 147 443 648~2 147 483 647 32位,有正负符号标志
Integer -2 147 443 648~2 147 483 647 32位,有正负符号标志
Int64 -263~263-1 64位,有正负符号标志
Byte 0~255 8位,无正负符号标志
Word 0~65 535 16位,无正负符号标志
LongWord 0~4 294 967 295 32位,无正负符号标志
Cardinal 0~4 294 967 295 32位,无正负符号标志
(2):Char类型又分为两种:AnsiChar是1字节的ANSI字符,存储256个字符。WideChar是2字节的Unicode字符,我们通常使用的Char默认即为WideChar.
(3):甚至连布尔类型都分为4种,不过我们仅需要知道的是Boolean(通用型)中的false和true是和0,1一一对应的,和JAVA一样,而其他的三种ByteBool,WordBool,LongBool中false是对应的0,非0都对应的true,类似于C。这三种类型占的字节数均不相等。
(4):枚举类型。和C基本一样的用法,使程序获得更高的可读性。声明如下
type
TDays = (Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);
var
DaysOfWeek : TDays
值得注意的是,数组中的Monday之列算已经声明了一个变量,所以它是一个标识符,在之后的变量声明时注意避免重复。
另外在TDays中的变量都默认为整数类型,分别与0,1,2,3,4,5,6一一对应。
(5)子界类型
呵呵,在C/C++中是完全不存在的,还好自学过Ruby,其中也有这个类型,感觉非常好用,类似于一个小型for语句,用处是给定一些范围控制,当我们想限制一个变量的取值范围时,此类型非常有用。例如
type
TWorkDay = Monday .. Friday;
则表示,TWorkDay这个变量仅可在星期1-5之间进行取值,当然这个例子前我们需要声明个数组,计算机可不知道英文Monday的意思。当我们的库单元的inplementation后面有{$R*.DFM}表示现在范围检查是打开的。此时若我们的变量取到了子界之外的值的话,就会出现一个范围检查错误。
(6):浮点数据(又称实型)
和整数类型一样,分成6种,都是对小数点后有效位数的长度控制不同而已,占用的字节数也有不同,某志这里就不再说明了,一般我们常用的就是Double/Real了,这俩还是一样的,有效位数为15位,占用8字节。