第七章过程与函数
7.3.1 变量参数
• 在过程或者函数定义的时候,如果形式参 数前冠以保留字var,则表示该参数是变量 参数。变量参数的值传递方式是地址传递, 所谓地址传递是指实际参数将自己的内存 地址传递给形式参数,这样一来形式参数 实际上和实际参数表示同一个存储单元。 形式参数值的改变将会影响实际参数的值。
7.3.2 值参数和常量参数
• 当然,一个事件过程也可以被多个事件甚至多个对 象共享。方法是,首先为某个事件创建事件过程, 然后在创建其它事件的事件过程时,从事件名称右 边的下拉组合框中选择已经建立的事件过程名称即 可。共享事件的好处是,当共享事件过程的多个事 件中任何一个事件发生时都会执行事件过程。有时 候很多相似组件共享事件过程可以减少代码的编写。
7.2.1 函数的定义
• 自定义函数要遵循先定义后使用的原则,只用经过 定义的函数才能够被程序调用,函数定义的格式是: function <函数名>[(<形参表>)]:<函数类型>; [局部声明]; begin <语句序列>; end;
<形参表>的格式为: [const |var ]<形参名>:类型
7.2 函数
• 和过程一样函数也是子程序的一种形式, 函数与过程的区别在于函数有返回值,过 程没有返回值。Delphi中的函数同样分为标 准函数和自定义函数,标准函数如sin,cos、 exp、datetostr等,标准函数无需定义,直 接调用即可。本节讲述自定义函数,自定 义函数要先定义,后调用,调用的方法和 标准函数一样。
7.1.2 通用过程
• 通用过程要遵循先定义后使用的原则,只 用经过定义的过程才能够被程序调用,过 程是没有返回值的,因此过程的调用就是 一个独立执行的语句。
7.1.2 通用过程
• 1.通用过程的பைடு நூலகம்义 通用过程的定义语法形式为: procedure <过程名>[(<形参表>)]; [局部声明]; begin <语句序列>; end;
7.3 参数传递
• 在定义函数或过程的时候所使用的参数称 之为形式参数,简称形参,在调用函数或 过程的时候所使用的参数称之为实际参数, 简称实参。实参和形参必须一一对应,而 且对应的参数的类型也必须相同。参数传 递是指调用程序按照先后顺序将实际参数 一一传递给对应的形式参数。按照参数传 递方式的不同,形式参数还可以分为变量 参数、常量参数、值参数。
• 2.常量参数 无论实参是否是变量,常量参数在过程中, 其值不能改变。
第7章 过程与函数
• 过程(procedure)与函数(function)是实现 面向对象编程思想的重要手段。在Delphi中将 各个功能模块做成函数或者过程的形式,供程 序不同位置的调用,被调用的函数和过程也成 为子程序。使用函数和过程不仅可以将一个大 的、复杂的问题简单化,而且还可以使程序更 加清晰、条理。
• 过程与函数的区别在于过程没有返回值,而函 数有返回值。一般来说定义过程的目的是为了 实现某个功能、执行某个操作,而定义函数的 目的在于计算得到某个值。
7.1 过程
在Delphi中过程分为系统标准过程和自定义过 程。系统标准过程是系统内部定义的,无需定 义即可直接调用。自定义过程也分为两类,即 事件过程和通用过程。
• 在定义函数或者过程的时候,如果参数前 被冠以保留字const,那么该参数就是常量 参数,如果参数前既没有保留字var也没有 保留字const,那么该参数就是值参数。
7.3.2 值参数和常量参数
• 1 值参数 值参数的值的传递是按照值来传递的,即 将实参的值传递给形参,形参和实参不是 一个存储单元,形参值的改变,不会影响 实参。
7.1.2 通用过程
• 2. 通用过程的调用 程序执行某个过程称之为调用,调用的格式为: 过程名(实参表);
• 说明: (1)实参表中的参数的个数和类型必须和形 参一致,实参是按照在参数表中的先后顺序将 参数值依次传递给形参的。 (2)如果形参用前冠以var,则相应的实参必 须是变量,否则只需要是同类型的表达式即可。
<形参表>的格式为: [const |var ]<形参名>:类型
7.1.2 通用过程
• 说明: (1)保留字Procedure是定义通用过程的首部,过 程名遵循标识符的命名规则。 (2)<形参表>由若干个形式参数组成,形式参数的 类型和个数都必须给定,同类型的形式参数之间用 逗号隔开,不同类型的形式参数之间用分号隔开, 如果没有形式参数,则括号可省略。 (3)局部声明部分可以声明局部变量、常量、类型 等等。 (4)程序体以begin开始,以end结束,end之后是 分号。
7.2.1 函数的定义
• 说明: (1)保留字Function是定义函数的首部,函数名遵循标识符的 命名规则。 (2)<形参表>由若干个形式参数组成,形式参数的类型和个数 都必须给定,同类型的形式参数之间用逗号隔开,不同类型的 形式参数之间用分号隔开,如果没有形式参数,则括号可省略。 (3)局部声明部分可以声明局部变量、常量、类型等等。 (4)程序体以begin开始,以end结束,end之后是分号。 (5)<函数类型>是函数返回值的类型,函数是有返回值的。函 数的返回值是通过函数名带回的,因此,在函数定义部分需要 给函数名赋值,如果在函数体中不给函数名赋值,则函数的返 回值就是默认值,数值型的默认值是0,布尔类型就是false,字 符类型就是空字符等等。
事件过程的执行有两种方式,一种是事件驱动, 即一个事件发生了,系统自动执行相应的事件 过程,还有一种就是调用并执行事件过程。通 用过程不依附于对象,通用过程一般用来执行 某些操作,完成某个功能。有些功能代码在程 序的多处出现
7.1.1 事件过程的创建与调用
• 在对象监视器中选择某个对象(或者在窗体中单击 该对象),然后在对象监视器的“Event”页中选择 相应的事件并双击右边的空白区域,Delphi将自动 产生一个默认的事件过程。事件过程的名称是对象 名加上事件类型名。当一个事件发生后,Delphi会 自动执行相应的事件过程。