登陆注册
36209800000013

第13章 Delphi的编程语言--ObjectPascal(3)

过程调用如下:

var

int:integer;

begin

int:=20;

sum(int);

end;

因为i是变量参数,所以过程调用后,形式参数的值已改变(由20变为20+10=30),实在参数的值也会随之改变(也为30)。

3.常数参数

在定义过程或函数时,常数参数的形参名前要加关键字const。

常数参数是将形参和实参都视为常数,其值在过程或函数运行期间不改变,也就是说,在过程或函数中,不能有改变参数值的操作。

4.6.4常用的标准函数和过程为了方便用户,Delphi中定义了许多标准的函数和过程,这里介绍一些常用的标准函数和过程。

1.数值函数

1)Abs函数

定义:functionAbs(X);

功能:返回参数X的绝对值,X可以为整数或实数类型,返回值类型与X的类型相同。

2)Sin、Cos、ArcTan函数

定义:functionSin(X:Extended):Extended;functionCos(X:Extended):Extended;functionArcTan(X:Extended):Extended;功能:分别返回参数X的正弦、余弦和反正切值。

3)Exp、Ln函数

定义:functionExp(X:Real):Real;functionLn(X:Real):Real;功能:分别返回参数X的以e为底的指数值和自然对数值。

4)Int、Frac函数

定义:functionInt(X:Extended):Extended;functionFrac(X:Extended):Extended;功能:分别返回参数X的整数部分和小数部分。

5)Sqr、Sqrt函数

定义:functionSqr(X:Extended):Extended;functionSqrt(X:Extended):Extended;功能:分别返回参数X的平方和平方根。

6)ParamCount、ParamStr函数

定义:functionParamCount:Integer;functionParamStr(Index:Integer):String;功能:ParamCount返回应用程序的参数个数。

ParamStr(Index)返回应用程序第Index个参数;而ParamStr(0)则返回应用程序的文件名和路径。

7)Random函数、Randomize过程

定义:functionRandom[(Random:Integer)];(方括号内的参数为可选项)procedureRandomize;功能:Random返回一个随机数,若无参数Random,则该随机数为大于或等于0而小于1的实数;否则随机数为大于或等于0而小于参数Random的整数。

8)SizeOf函数

定义:functionSizeOf(X);Integer;功能:返回参数X所占用的字节数。

9)Odd函数

定义:functionOdd(X:Longint):Boolean;功能:判断参数X是否为奇数,若X为奇数,则函数返回True;否则函数返回False。

10)Trunc、Round函数

定义:functionTrunc(X:Extended):Int64;functionRound(X:Extended):Int64;功能:Trunc返回参数X取整以后的值。

Round返回参数X四舍五入后的值。

11)Max、Min函数

定义:functionMax(A,B);

functionMin(A,B);

功能:分别返回两个参数A、B中的较大值和较小值,参数A、B可为整数或实数类型,返回值与参数类型相同。

2.字符串函数

1)IntToStr、StrToInt、StrToIntDef函数

定义:functionIntToStr(Value:Integer):string;

functionStrToInt(constS:string):Integer;

functionStrToIntDef(constS:string;Default:Integer):Integer;

功能:IntToStr将参数Value转化为十进制整数表示的字符串。

StrToInt将参数S转化为整数,若转化不成功,则发生异常。

StrToIntDef将参数S转化为整数,若转化不成功,则返回Default。

2)IntToHex函数

定义:functionIntToHex(Value:Integer;Digits:Integer):string;功能:将参数Value转化为十六进制数字符串,Digits指出字符串的长度,当转换成的字符串长度不足时用0在左边填充。

3)FloatToStr、StrToFloat函数

定义:functionFloatToStr(Value:Extended):string;functionStrToFloat(constS:string):Extended;功能:FloatToStr将参数Value转化为字符串。

StrToFloat将参数S转化为实数。

4)StringOfChar函数

定义:functionStringOfChar(Ch:Char;Count:Integer):string;功能:生成由Count个字符Ch组成的字符串。

5)UpCase函数

定义:functionUpCase(Ch:Char):Char;功能:若Ch为小写字母,则函数返回对应的大写字母;否则函数返回Ch。

6)UpperCase、LowerCase函数

定义:functionUpperCase(constS:string):string;functionLowerCase(constS:string):string;功能:UpperCase将参数S中的所有小写字母转换为大写字母返回。

LowerCase将参数S中的所有大写字母转换为小写字母返回。

7)Copy函数

定义:functionCopy(S;Index,Count:Integer):string;功能:将字符串参数S中从第Index个字符开始的Count个字符组成的子字符串返回。

举例:s1:=‘ABCDEFG’;

s2:=Copy(s1,3,4);从s1的第3个字符开始的4个字符组成的子字符串则s2为‘CDEF’。

8)Delete过程

定义:procedureDelete(varS:string;Index,Count:Integer);功能:删除参数S中从第Index个开始的Count个字符。

举例:s1:=‘ABCDEFG’;

Delete(s1,2,3);

则s1为‘AEFG’。

注意过程与函数用法的不同:Copy是函数,可以放在赋值语句的右边;而Delete是过程,只能单独使用。

9)Insert过程

定义:procedureInsert(Source:string;varS:string;Index:Integer):string;功能:在参数S中的第Index个字符处插入Source字符串。

10)Pos函数

定义:functionPos(Substr:string;S:string):Integer;

功能:返回子字符串Substr在S中的位置;若Substr不在S中,则返回0。

11)Length函数

定义:functionLength(S):Integer;

功能:返回字符串参数S的长度。

12)CompareStr、CompareText函数

定义:functionCompareStr(constS1,S2:string):Integer;

functionCompareText(constS1,S2:string):Integer;

功能:比较两个字符串S1和S2,若S1S2,则返回一个大于0的整数;若S1=S2,则返回0;若S1S2,则返回一个小于0的整数。这两个函数的区别是:CompareStr区分大小写,CompareText不区分大小写。

3.系统函数

1)Date函数

定义:functionDate:TDateTime;

功能:返回系统当前的日期。

2)Time函数

定义:functionTime:TDateTime;

功能:返回系统当前的时间。

3)Now函数

定义:functionNow:TDateTime;

功能:返回系统当前的日期和时间。

说明:这3个函数的返回值都是TDateTime类型,实质是一个Double类型,其整数部分表示从1899年12月30日以来所经过的天数,小数部分表示经过24小时的百分比,例如0表示1899年12月30日零点,2.5表示1900年1月1日中午12点。

4)DateToStr、TimeToStr、DateTimeToStr函数

定义:functionDateToStr(Date:TDateTime):string;

functionTimeToStr(Time:TDateTime):string;

functionDateTimeToStr(DateTime:TDateTime):string;

功能:DateToStr将日期Date转换成字符串形式。

TimeToStr将时间Time转换成字符串形式。

DateTimeToStr将日期、时间DateTime转换成字符串形式。

5)DayOfWeek函数

定义:functionDayOfWeek(Date:TDateTime):Integer;

功能:返回日期Date对应的星期几。

4.7类和对象

ObjectPascal与传统Pascal的主要区别在于增加了面向对象程序设计的特性。

面向对象的程序设计的思想是按照自然规律认识世界的必然。我们要完整地认识一个物体,不能将这个物体的性质和对这个物体的使用分割开来。同样在程序设计中,不应该将要处理的数据和处理这些数据的方法分割开来。面向对象程序设计中的对象就是将要处理的数据和处理这些数据的方法结合在一起而建立的一个实体。而这个实体是面向对象程序中一个特殊类型--“类”的一个实例。

4.7.1类的基本概念

类是用户自己创建的数据类型。

类有3个组成部分(或者说有3类成员):字段(也称域)、方法和属性。

字段是类的内部数据变量,方法是类中定义的过程和函数,属性是类提供给外部使用的数据变量,但与字段不同的是,属性还封装了读取和修改数据的方法。

对象和类的关系是变量和数据类型的关系,对象是类这种数据类型的变量。

4.7.2类的定义

如同构造数据类型一样,类也需要定义。

定义类的语法格式为:

type

类名=class(基类);

成员列表

end;

其中

1)type/end是前面定义构造数据类型用过的关键字。

2)class是定义类的关键字;圆括号中的基类是指派生本定义类的父类,若缺省则说明本定义类的基类是ObjectPascal中所有类的共同基类Tobject。

3)成员列表声明该类的所有成员,即字段、方法和属性。

4)类成员字段的声明同一般变量的声明方法一样,即“变量名:数据类型”格式。

5)类成员方法的声明同一般过程和函数的声明方法一样,即“procedure过程名(形参列表)”和“function函数名(形参列表)”格式。

6)因为属性还封装属性的读写方法,所以属性的声明不但要声明属性名和类型,还要声明属性的读写方法,其语法格式为:

property属性名:类型read字段或方法write字段或方法;其中property、read、write都是保留字。

7)为了控制对类成员的访问权限,声明类成员时可用5个关键字(也称存取说明符)定义类成员的可见性,如表4-3所示。

对类数据的访问用类方法来实现,而将类数据对外部隐蔽起来,称为类的封装。类的封装是面向对象思想的一个重要概念。

4.7.3对象的创建与删除

如前所述,对象是类的实例,因此定义了类之后,还要创建对象,如同定义了数据类型,还要定义变量一样。不同的是创建对象要调用构造函数Create,当不需要这个对象时,要调用析构函数Free删除它。

一个调用构造函数、析构函数创建对象和删除对象的实例如下。

先定义一个类:

可见,方法成员的访问同调用一般函数或过程的格式不同,即要在方法前面加“对象名.”,如:student1.setname。类似地,字段成员的访问同一般变量的访问也不同,也要在字段成员前面加“对象名”,如。

4.8类的继承性

类的继承性是面向对象的重要概念。

4.8.1类的继承的概念

类的继承,是指把一个新类定义为已经存在的旧类的后代,旧类称为父类或基类,而新类称为子类或派生类、衍生类,子类继承了父类的所有成员。

在Delphi中使用继承的语句很简单,只要在派生类声明时指出其基类就可以:

这里,定义了类TA,又定义了它的一个派生类TB。TB不仅有它自己的域B和方法Pb,而且继承了TA的域A和方法Pa,因此B0.A和B0.Pa都是合法的。

4.8.2覆盖根据类的继承的概念,派生类可以继承基类的所有成员。但有时没有必要或者不合适,这时可以通过如下的方法进行修改:创建和原成员同名的成员,当编译器调用该名成员时,调用的是新成员,而覆盖了老成员,从而达到修改基类成员的目的。

习题41.在ObjectPascal程序代码中,注释有几种格式?各用于什么情况?

2.什么是常量?什么是变量?ObjectPascal中如何定义常量和变量?

3.ObjectPascal中有哪些数据类型?

4.ObjectPascal中有哪些运算符?它们的优先级如何?什么是表达式?

5.赋值语句有什么用途?其格式是什么样的?

6.ObjectPascal中有哪几种分支语句?假设有变量A、B,若A0,则B=10;若A=0,则B=0;若A0,则B=-10,试写出实现以上功能的if语句。

7.说明for语句、while语句和repeat语句的区别。假设I=1~10,J=1~10,试写出实现M=11+12+22+13+…+910+1010的for语句。

8.过程和函数有什么区别?说明它们的定义和调用的格式。

9.如何定义类?如何定义对象?

同类推荐
  • 创业在微软

    创业在微软

    身处软件巨擘微软之中,何来“创业”二字?本书详尽勾勒了微软亚洲工程院(ATC)的成长历程,披露了工程院人在“创业”过程中不为人知的种种酸甜苦辣,生动展现了工程院的独特文化,并从另一个角度展现了其领袖人物张宏江博士的心路历程和管理思想。
  • 信息技术教育大全-计算机网络

    信息技术教育大全-计算机网络

    信息技术教育大全-计算机网络信息技术教育大全-计算机网络信息技术教育大全-计算机网络信息技术教育大全-计算机网络信息技术教育大全-计算机网络信息技术教育大全-计算机网络信息技术教育大全-计算机网络
  • 不懂PowerPoint就当不好经理

    不懂PowerPoint就当不好经理

    经理人如何用PowerPoint,来规划部门的发展,如何用PowerPoint来表达自己的经营主张?本书为各类经理人提供了从入门到提高,从原理到实战的一系列知识,相信本书将让演示文稿为经理人的管理效能加分!
  • 从平凡到神奇

    从平凡到神奇

    本书结合多年的开店经验,全面地讲解了在淘宝网开设店铺的相关知识,为准备在淘宝网创业的卖家及刚刚创建店铺的店主,提供全面的开店和经营方面的指导。本书按照淘宝开店的流程安排内容,侧重每个步骤中的实际技巧。本书分3个部分:如何在淘宝开店、如何开好店、如何做强做大店铺。前3章介绍了在淘宝网开设店铺的基础知识,指导读者在开设店铺前做好准备工作,以及建立起自己的店铺,并且完成店铺的第一笔交易;第4章至第7章主要介绍了网店装修和推广的方法,以及网店的物流经验和技巧;第8章着重介绍了将网店做大做强的方法,帮助卖家在开店和经营中树立品牌意识,做大做强自己的店铺。
  • 体感交互技术

    体感交互技术

    本书提出了体感计算的研究,探讨了基于体验性认知的个性化电子学习方式,并且分析了面向儿童的艺术创造体验,在体感虚拟化身的帮助下,用户可以通过身体运动,促进情感心智的全面发展,
热门推荐
  • 伶仃瑶

    伶仃瑶

    由一块水晶引发的穿越,是人为还是意外。一位平凡女子,穿越失忆,是设计还是宿命。真正的幕后黑手到底是谁?如果来了,那就要把自己的事做下去。
  • 妻伴君如梦

    妻伴君如梦

    【本故事纯属虚构,若有雷同,便是做梦】订婚之夜,因喝下妹妹给自己的一杯酒而到了另一个世界,却发现那里的帝王和自己在现代的未婚夫长相一模一样,于是便开启了一场追逐战,然而,已俘获他的心后,她却要离他而去。一杯阴阳酒,她来到他身边,一杯阴阳酒,她却要离开他身边。【以前的那个小说已弃坑==不要问我为什么==第二次写,文笔依旧不太好,有一个人看都是支持啊!】
  • 仙魔风云录

    仙魔风云录

    天地不仁,以万物为刍狗。百余年前,爆发的仙魔大战,使得生灵涂炭,尸横遍野,无尽的忧伤笼罩在神州大陆之上,千里疆土再无鸡鸣,累累孤坟声声哀啼。大战过后的神州大陆,已然被魔族屠杀的十室九空,在几十年里神州大陆都没有恢复生机,田园里到处杂草丛生,房屋也因为无人居住的原因,变得破烂不堪。百余年的过去,神州大陆慢慢的开始了恢复。然而山雨欲来风满楼,长久以来这修真界那里又有安宁可言。
  • 天行

    天行

    号称“北辰骑神”的天才玩家以自创的“牧马冲锋流”战术击败了国服第一弓手北冥雪,被誉为天纵战榜第一骑士的他,却受到小人排挤,最终离开了效力已久的银狐俱乐部。是沉沦,还是再次崛起?恰逢其时,月恒集团第四款游戏“天行”正式上线,虚拟世界再起风云!
  • 情僧佛缘

    情僧佛缘

    传说,帝下之都,风景秀丽,又有昆仑之墟,方八百里,高万刃,直冲云霄,其间有座山堪称宝玉山,遇妖风邪气,便会发出沉闷的钟声,又名钟山。群仙常聚于此。每逢佳节,守护神西王母,即要大摆宴席,款待天帝众神。一日花好月圆夜,天帝带众天神来此赏月游玩,尽兴时,钟声响起,天帝问西王母,何来钟声。王母报说必是这山下又起纷争,待己察看察看便知谁人在作乱,天帝准奏,王母即跃上万刃山颠,但见昆山下凡间一处烧杀战乱,生灵涂炭不堪入目。这便惹下了一段不为人知的曲折动人故事来。
  • 穿越兽世:兽夫大大宠上天

    穿越兽世:兽夫大大宠上天

    安然自己也没想到露个营也能给整穿越了,还是在一个不知名的兽世......
  • 重生之盛世流芳

    重生之盛世流芳

    赵真带着生前的忏悔重生了,回到了自己的童年,带着20多年的记忆来到年少时的村子里,望着眼前破旧的一切,重回这里的赵真暗暗发誓,一定要改变这一切。赵真说,我没有特异功能,能够看破人心,让自己一帆风顺。也没有仙家法术点石成金,我唯一具有的,便是一颗永不停止的心脏,带着我的梦,飞到世界的每一个角落,我要带领我身边的所有的人,在平淡中迈向世界的巅峰。搅动世界风云,成为一代商业巨头,带领村人发家致富,且看重生而回的赵真如何让自己的名字,响彻在整个世界,流芳百世。《想要更接地气一点吗?天花乱坠的都市小说厌烦了吗?请跟我走进赵真的世界,在平凡中一步步走向成功,在现实中体味人生百态!一切尽在重生之盛世流芳!》
  • 降血糖不可不知的300个细节

    降血糖不可不知的300个细节

    《降血糖不可不知的300个细节》为糖尿病患者提出了理想、专业、可行的防治细节。特别是针对初发患者,使其能够正确认识糖尿病,以减少并发症的发生。同时也向那些存在糖尿病危险因素的人们提出忠告.让他们提高警惕,及早就诊,以便早发现,早治疗。为了更好地为读者服务。《降血糖不可不知的300个细节》囊括了日常保健、饮食方案、用药细节等方面,旨在为患者提供最新的治疗资讯、最实用的养护细节,让每个糖尿病患者都能够轻松生活,享受健康和幸福。
  • 恋爱推理事件簿

    恋爱推理事件簿

    这是一本推理事件簿。虽然我更愿意叫他“我和学姐甜蜜约会史”——虽然每次约会都不是走的纯爱路线。学姐!我们什么时候才可以不cos柯南金田一好好来一次决胜约会?!不!我们的宗旨就是约会总在推理后!******************************************综上,技术宅吐槽向学弟X呆萌正直向学姐论如何在各种凶案现场进行一场罗曼蒂克的约会。一直搞不定的决胜约会和他们的推理事件全纪录!
  • 天命传记

    天命传记

    冥冥之中,自有天意。是天意难违?还是天命难测?一双无形的幕后黑手,默默的操控着这一切,是你?是我?还是谁?问苍茫大地,谁主沉浮?