Delhpi中的函数与过程
2015-10-06 22:56
267 查看
Delhpi中的函数与过程
函数与过程的概述
过程可以看作轻量级的函数。从形式上讲:过程强调处理事务的流程而不是结果,所以过程没有返回值。而函数强调处理事务后的结果,所以有返回值。
从功能上讲:函数可以用作类的构造器即构造函数,而过程不具备这种功能。
除此之外,函数与过程并没有太大的差异。
注意:以下类容以函数为准,讲解一些需要注意的事项。
函数的形式参数的值是否可变
{使用关键字const后,形式参数的值便不可以改变,否则编译出错} function TForm1.ConstFunction(const name: String): String; begin {不可以这样:name := '鬼A魅'} Result := name; end; {默认情况下,形式参数的值是可以改变的} function TForm1.NormalFunction(name: String): String; begin name := '鬼A魅'; Result := name; end;
</pre><h2>函数的形式参数的值是传值还是传址</h2><div></div><pre name="code" class="delphi">var MyValue: Integer = 2;//全局变量 {传址,将内存单元MyValue的地址传递给address} function TForm1.AddressFunction(var address: Integer): Integer; begin {因为address中保存的是内存单元MyValue的地址, 对address的操作就是对MyValue的操作, MyValude中的值会发生变化} address := address * 2; {这里再将内存单元MyValue的地址传递给Result,函数拿到的是MyValue中的值} Result := address; end; {传值,将内存单元MyValue的值复制一份传递给value} function TForm1.ValueFunction(value: Integer): Integer; begin {对value的操作是不会影响到MyValue的, 如果此刻MyValue的值发生变化同样也不会影响到value} value := value * 2; Result := value; end; procedure TForm1.Button1Click(Sender: TObject); begin //结果:2 showMessage(IntToStr(MyValue)); //结果:4,函数AddressFunction()在这里会改变MyValue的值 showMessage(IntToStr(AddressFunction(MyValue))); //结果:4 showMessage(IntToStr(MyValue)); //结果:8 showMessage(IntToStr(ValueFunction(MyValue))); //结果:4 showMessage(IntToStr(MyValue)); end;
函数的形式参数的开放模式
说明:可以通过数组来传递参数个数或者参数类型不确定的参数列表{参数为数组,该数组的长度与数组中元素的类型均不确定} function TForm1.LengthTypeParams(const MyArray: array of const): Integer; var index: Integer; str: String; begin {通过循环来处理数组中的所有元素} for index := Low(MyArray) to High(MyArray) do begin {因为类型不确定,所以我们需要判断数据的类型然后再进行相应的处理} case MyArray [index].VType of vtInteger: str := IntToStr(MyArray [index].VInteger); vtBoolean: str := BoolToStr(MyArray [index].VBoolean); end; showMessage(str); end; end; {参数为数组,该数组的长度不确定,但数组中元素的类型确定} function TForm1.LengthParams(const MyArray: array of Integer): Integer; var index: Integer; begin {通过循环来处理数组中的所有元素} for index := Low(MyArray) to High(MyArray) do showMessage(IntToStr(MyArray[index])); end; procedure TForm1.Button2Click(Sender: TObject); begin showMessage(BoolToStr(True)); LengthParams([1, 3, 5]);//结果为:1,3,5 LengthTypeParams([520, True]);//结果为:520, -1(True:-1;False:0); end; {元素类型可变的数组,元素的可能类型如下} type TVarRec = record case Byte of vtInteger: (VInteger: Integer; VType: Byte); vtBoolean: (VBoolean: Boolean); vtChar: (VChar: Char); vtExtended: (VExtended: PExtended); vtString: (VString: PShortString); vtPointer: (VPointer: Pointer); vtPChar: (VPChar: PChar); vtObject: (VObject: TObject); vtClass: (VClass: TClass); vtWideChar: (VWideChar: WideChar); vtPWideChar: (VPWideChar: PWideChar); vtAnsiString: (VAnsiString: Pointer); vtCurrency: (VCurrency: PCurrency); vtVariant: (VVariant: PVariant); vtInterface: (VInterface: Pointer); end;
函数的形式参数的缺省模式
注意:声明函数时需要给那些缺省的参数赋初值function WithoutParams(param1: Integer; param2: Integer = 2; param3: Integer = 3) : Integer;
function TForm1.WithoutParams(param1, param2, param3: Integer): Integer; begin showMessage(IntToStr(param1)+'|'+IntToStr(param2)+'|'+IntToStr(param3)); end; procedure TForm1.Button3Click(Sender: TObject); begin WithoutParams(1); //结果为:1|2|3 WithoutParams(1, 4); //结果为:1|4|3 WithoutParams(1, 4, 5); //结果为:1|4|5 end;
缺省参数后面的参数都将缺省。
函数的重载
说明:函数名字相同,参数列表不同。声明时需要使用关键字overload对同名的函数进行标注。function SameNameFunction(): Integer; overload; function SameNameFunction(param: Integer): Integer; overload;
public { Public declarations } function SameNameFunction(): Integer; overload; function SameNameFunction(param: Integer): Integer; overload;
相关文章推荐
- js 中获取上下文路径
- Codeforces Round #319 (Div. 2)
- [经济学原理|宏观部分]宏观经济政策分析
- Android:在EditView左边加入ImageView并调试相应位置,使其好看些
- [经济学原理|宏观部分]产品市场和货币市场
- print()方法对char类型数组自动遍历输出源码分析
- Mysql――数据查询
- Android解耦库EventBus的使用和源码分析
- ISLR系列:(4.1)模型选择 Subset Selection
- 内存管理基础
- 在jsp页面中使用CKEditor
- 深入浅出MFC学习笔记2--消息映射和消息路由
- 变量与内存空间的关系
- fontAwesome代替网页icon小图标
- 汇编“生活”(一)——王爽《汇编语言》实验9程序代码——改变显示器字体颜色
- [经济学原理|宏观部分]简单国民收入决定理论
- Matlab机器人工具箱
- 多态
- [经济学原理|宏观部分]国民收入核算理论
- 《清明上河图密码2》北宋首都的扰乱大宗商品交易秩序的大案。精妙的推理过程与大量细致的当时商业与生活细节同时出现在书中,五星推荐