关于函数的参数定义问题。(50分)

  • 主题发起人 主题发起人 codez
  • 开始时间 开始时间
C

codez

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好,我刚刚接触 delphi 不久,感觉很好。
在看 TObject 的源码的时候有些不太明白的东西,请大家指点。
1. class function or class procedure,
这里是不是类似于 C++ 中的 friend 呢?个人理解。
2. function GetInterface(const IID: TGUID;
out Obj): Boolean;
那个 out Obj 参数, out 我理解为 Com 中 idl 定义的 [out],
但是那个 Obj 为什么没有定义类型呢?缺省的类型是什么?不会是 Variant 变体变量吧?
还是?
 
1 在Delphi中没有friend,通常在一个单元中定义的类可以互相访问私有变量和私有方法,
可以认为是C++中的friend.
Delphi中的Class Function或者Class Procedure 可以认为是
C++中的static方法。
2 相当于idl的Out,没有类型是只无类型参数,不是Variant类型,它是按照地址传递的。
 
那么意味着无类型参数实际上 obj 传入的就是个 dword 的值了?
那么他不会检查传出的类型,只是强行转换为 dword 返回了,是吗?
 
它不是强制类型转换, 而是传递的地址...或者说相当于C++中的&,
转贴一段
http://download.pchome.net/user/delphi/expldelphi6.htm
无类型参数 所谓无类型参数,就是在过程或函数声明和定义时不指定参数的数据类型,程序示例
如下:
Procedure MyProc(Var Value);
上例中,Value参数没有指定数据类型,但前面必须加Var或const,加Var表示参数的值是可以改
变的,加Const表示参数是只读的。
当参数是无类型参数时,实参可以是任意数据类型的变量或表达式,使用无类型参数可以使程序
编制更加灵活,但也给编译器带来麻烦,因为它没法对 参数进行合法性检查。
正因为参数是无类型的,因此在使用前最好先进行类型强制转换,把它转换成某种特定的数据类
型,程序示例如下:
Procedure Myproc(Var Value);
Type
TMyArray=arrayp[1..10] of Integer;
Var I:integer;
begin
for i:=1 to 10 do
TmyArray(Value):=i;
end;

 
谢了,给分。
 
后退
顶部