请教各位网友,问个在Delphi中传参的问题:(0分)

  • 主题发起人 主题发起人 netbug
  • 开始时间 开始时间
N

netbug

Unregistered / Unconfirmed
GUEST, unregistred user!
请看:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
btn:TBUtton;
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
btn:=TButton.create(form1);
btn.parent:=form1;
end;
在语句btn:=TButton.create(form1)中参数form1是个类,
我想问:
一:在Delphi中允许以类作参数进行传递,是吗?
二:在以类作参数进行传递时,是不是把类中的域以值的方式传递,
而方法是以地址的方式进行传递的?
谢谢.
 
form1不是类,是个实例,TForm1才是类
 
delphi中传的是个所谓的类引用,
 
这可能是BORLAND不想说清楚,或不想告诉others
 
这种情况,都是传的指针,
所以有时候不能用简单的赋值,而要用assign,
 
此处的参数只识说明新建的实例来自何处.form1并不是类,而是类的实例(intance).
 
Delphi同C++在关于对象方面区别很大。

对C++来讲,可以通过三种方式定义、使用一个类(TClass)的实例,分别是:

1.TClass a;//定义TClass类的变量a,并初始化。
2.TClass* a;//定义一个指向TClass类的指针变量a,注意,a没有指向一个具体类实例
3.TClass &amp
a=b;//定义一个指向TClass类实例b的引用变量a,注意:a就是b。

因此在C++定义函数参数时,可以采用上面任意一种。

对Delphi来讲,定义一个类变量,只有一种方式就是var a:TClass;在这里,同C++
的第一种方式表面上相同,但实质完全不同,实质上应该是C++的第二中的三种的结合体。
就是说,实质上a是一个指针,但是使用起来可以当作C++的引用来使用。a的实际内存仅仅占用了四个字节(指针的大小),a的内容是指向类TClass在堆中实例的地址。
 
类是一个抽象的东西,只有你创造了它的一个实例(即对象)时才能使用它定义的方法。
 
接受答案了.
 
后退
顶部