函数的缺省参数

函数或过程可以有缺省参数default parameters),正如其名称一样,如果函数或过程在调用时没有指定参数,它就会为函数提供一个缺省值。

为了声明一个有缺省值的过程或函数,在参数类型后跟一个等号和缺省值。

下面照惯例,举一个比较完整的例子,来实现一个加法的程序,默认是两个数相加,但是也能实现三个数相加的功能。

1、新建一个Console Application。

2、在代码中输入以下代码,创建一个AddInts函数,用来实现数的相加,如下:

program Project1;
{$APPTYPE CONSOLE}
uses
  SysUtils;
{ AddInts函数中第三个参数I3默认值为0}
function AddInts(I1, I2: Integer; I3: Integer = 0): Integer;
begin
  Result := I1 + I2 + I3;
end;
var
  I1, I2, I3: Integer;
  JG: Integer;
begin
  I1 := 123;
  I2 := 321;
  I3 := 555;
  JG := AddInts(I1, I2);    { 实现两个数相加 I1 + I2}
  Writeln(IntToStr(I1) + ' + ' +
    IntToStr(I2) + ' = ' +
    IntToStr(JG));          { 输出 I1 + I2 = JG}
  JG := AddInts(I1, I2, I3);{ 实现三个数相加 I1 + I2 + I3}
  Writeln(IntToStr(I1) + ' + ' +
    IntToStr(I2) + ' + ' +
    IntToStr(I3) + ' = ' +
    IntToStr(JG));          { 输出 I1 + I2 + I3 = JG}
  Readln;
end.

3、运行结果如下:

0045

4、有缺省值参数的最大好处是,在向一个已存在的过程和函数增加功能时,不必关心向后兼容的问题,就像上面的AddInts函数一样,增加一个具有缺省值的第三个参数,就能把AddInts函数扩展而不必担心它的兼容问题。

Note

任何缺省参数只能放在函数或过程参数表的结尾,下面的代码就是一个无效的函数声明:

procedure MyProcedure(X: Integer; Y: Integer = 10; Z: Integer);

编译以上声明,将会报出“Default value required for ‘Z’”错误,如果要想成功编译这个函数声明,就必须把缺省参数移动到参数表的末尾,如下:

procedure MyProcedure(X: Integer; Z: Integer; Y: Integer = 10);

以上代码均在Delphi7中测试通过。

原文地址:https://www.cnblogs.com/pchmonster/p/2299985.html