您的位置:首页 > 编程语言 > Delphi

Delphi的学习笔记十一——类4

2012-12-31 09:49 344 查看
1.类的方法参数可以分为四种(默认参数(传值)、var(传址)、out(输出)、const(常数))。这里需要注意的是var定义的参数,例如:

{var参数是传址, 会被改变}
function MyF2(var x: Integer): Integer;
begin
  Inc(x);
  Result := x;
end;

Inc(x):表示对x的内存地址加1,这将导致方法返回的值的变化。

对于out(输出),其用法和var一致,所以在一般情况下我们采用var来定义而不是out;对于const,则表示该定义的变量为常量,常量的值无法改变。



2.implementation区/interface区的方法

对于implementation区中的方法,只能在本单元中调用。这里就不举例子了,在之前的举例中都有涉及。

对于interface区中的方法,可以被其它单元调用。



3.在类中的方法

如果一个方法被声明在一个类中,那么调用该方法前就必须先对该类进行初始化。这与其他语言对于类中方法的调用是一致的;并且在实现该方法时,必须在方法名前加上类的前缀,例如:

{函数在实现区必须有 TForm1. 作为前缀}
function TForm1.MyFun(x,y: Integer): Integer;
begin
  Result := x + y;
end;


4.调用其他单元的函数

在调用其他单元的函数时,被调用单元的函数必须在interface区中声明,并在implementation区中也实现。在调用时,我们需要对其单元进行引用,例如:

implementation

{$R *.dfm}

uses Unit2; {必须 uses 定义函数的单元}

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  i := MyFun(1,2);         {调用函数}
  //i := Unit2.MyFun(1,2); {有时为了避免重名, 需要这样调用}
  ShowMessage(IntToStr(i)); {3}
end;


5.方法的提前声明

如果前面的方法需要调用后面的方法,则需要在被调用的方法中声明forward指示字。例如:

function MyFunB(x: Integer): Integer; forward; {使用 forward 指示字提前声明}

function MyFunA(x: Integer): Integer;
begin
  Result := MyFunB(x) * 3; {要调用后面的方法, 后面的方法需要提前声明}
end;

function MyFunB(x: Integer): Integer;
begin
  Result := Abs(x);
end;

但如果该方法已在interface区中提前声明了,那么就无需在对方法添加forward指示字了。



6.静态数组做参数

对于静态数组做参数,我们需要在Type区把数组定义成一个类型,在对该类型定义一个变量,最后在使用该变量。例如:

//应该先把数组定义成一个类型
Type
  IntArray = array[0..9] of Integer; {先把需要的数组定义成一个类型}  
//给一个静态数组求和的函数
function MyFun(arr: IntArray): Integer;
var
  i: Integer;
begin
  Result := 0;
  for I:= 0 to Length(arr)-1 do
  begin
    Result := Result + arr[I];
  end;
end;


而对于开放数组参数,则可以将其直接作为参数来使用,不需要在Type区将其定义为一个类型。例如:

function MyFun(const arr: array of Integer): Integer;


对于遍历开放数组也需要注意,因不知其长度,所以在遍历时需要用到Low()和High()方法,例如:

for i := Low(iArr) to High(iArr) do
  begin
    iArr[i] := i + 1;
  end;


7.指针参数

在方法中传递指针,我们需要用指针类型来定义。具体实现如下:

function MyFun(p: PInteger): Integer; {PInteger 是 Integer 的指针类型}
begin
  p^ := p^ * 2;
  Result := p^;
end;


在调用该函数时,需要用@来获取变量的地址,例如:

var
  i,x: Integer;
begin
  i := 8;
  x := MyFun(@i);


9.方法重载

方法的重载只要用在方法重名但参数不一样的情况,在方法后面必须声明overload指示字。在调用时根据参数来决定调用哪个方法。这与其他语言的重载相似。在published区中的方法命名要有唯一性,该区域方法不能被重载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: