Delphi面向对象的编程方法(三),Delphi面向对象的编程方法(三)
【 tulaoshi.com - Delphi 】
2.1.8.4 过程和函数的语句部分
过程或函数的语句部分由begin开始,end结束。函数需要一个返回值。可以将返回值赋给函数名称,也可以将返回值赋给Result变量。下面的例程将返回值赋给函数名称:
function CalculateInterest(Principal,InterestRate: Double):Double;
begin
CalculateInterest := Principal * InterestRate;
end;
将返回值赋给Result变量也是可以的,则上面的程序改为:
Result := Principal*InterestRate;
下面是这个函数的调用方法:
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)InterestEarned :=CalculateInterest(2000,0.012);
在Implementation后面的过程和函数,可以且只能被此库单元的事件处理过程使用。要让过程和函数可以被其他的程序库单元使用,则需要将过程或函数的标题部分放在库单元中的interface部分,而把含标题的整个过程或函数放在库单元的inplementation部分,并在要访问这个过程或函数的库单元的uses子句中加入说明这个过程或函数的库单元名称。
2.1.8.5 函数的递归调用
在Object Pascal中,过程或函数必须先说明再调用。上文的NoValue函数必须在使用它的事件处理过程之前说明和执行,否则程序会报告一个未知标识符的错误。
以上规则在递归调用时是例外情况。所谓递归调用,是指函数A调用函数B,而函数B又调用函数A的情况。在递归调用中,函数要进行前置,即在函数或过程的标题部分最后加上保留字forword。下文的例程是一个递归调用的典型例子:
…
implementation
var
alpha:Integer;
procedure Test2(var A:Integer):forword;
{Test2被说明为前置过程}
procedure Test1(var A:Integer);
begin
A :=A-1;
if A0 then
test2(A); { 经前置说明,调用未执行的过程Test2}
writeln(A);
end;
procedure Test2(var A:Integer);{ 经前置说明的Test2的执行部分}
begin
A :=A div 2;
if A0 rhen
test1(A); {在Test2中调用已执行的过程Test1}
end;
procedure TForm1.Button1Click(Sender:TObject);
begin
Alpha := 15; { 给Alpha赋初值}
Test1(Alpha); { 第一次调用Test1, 递归开始}
end;
按钮的OnClick事件处理过程给Alpha赋初值,并实现先减1再除2的循环递归调用,直到Alpha小于0为止。
2.1.8.6 过程和函数的参数
当您的程序代码在调用一个过程或函数时,通常用参数传递数据到被调用的过程或函数中。最常用的参数有数值参数、变量参数和常量参数三种。
由被调用过程或函数定义的参数为形参,而由调用过程或函数指明的参数叫实参。在NoValue函数中,说明函数体中的AnEditBox是形参,而调用时在if NoValue(Edit1) …中,Edit1是实参。
数值参数在运行过程中只改变其形参的值,不改变其实参的值,即参数的值不能传递到过程的外面。试看下面的例程:
procedure Calculate(CalNo:Integer);
begin
CalNo := CalNo*10;
end;
用以下例程调用Calculate函数:
…
Number := StrToInt(Edit1.Text);
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/delphi/)Calculate(Number);
Edit2.Text
来源:http://www.tulaoshi.com/n/20160129/1492288.html
看过《Delphi面向对象的编程方法(三)》的人还看了以下文章 更多>>