读书人

TCompanent构造函数,函数体什么样子?该

发布时间: 2012-03-20 14:01:11 作者: rapoo

TCompanent构造函数,函数体什么样子???
一. vcl的类TCompanent如下:

class PASCALIMPLEMENTATION TComponent : public TPersistent

{ typedef TPersistent inherited;

private:

TComponent* FOwner;

public:
__fastcall virtual TComponent(TComponent* AOwner);

__property TComponent* Owner = {read=FOwner};


...

};

二. c++ builder 下写的 程序:

TButton *Button1=new TButton(Panel1);

三. 提问:

1 . __fastcall virtual TComponent(TComponent* AOwner);具体的函数体是什么???

2. 二.中的Panel1先传给__fastcall virtual TComponent(TComponent* AOwner)的参数

TComponent* AOwner,__fastcall virtual TComponent(TComponent* AOwner)再在其内部用关键字inherited将

TComponent* AOwner传给 TComponent* FOwner,最后将TComponent* FOwner传给__property TComponent*

Owner = {read=FOwner}的Owner, 不知道对不对;




[解决办法]
//Delphi中的TComponent的构造函数是这样的,你贴的是C++ Builder的
constructor TComponent.Create(AOwner: TComponent);
begin
FComponentStyle := [csInheritable]; //设置控件可继承的样式
if AOwner <> nil then AOwner.InsertComponent(Self); //通知控件所有者将自己加入控件列表中,以便以后管理
end;

TButton *Button1=new TButton(Panel1);
Panel1被传到TButton的构造函数中,然后,在构造函数中调用TComponent(即Panel1)的InsertComponent将自己加入到自身的管理列表中。在InsertComponent中先进性了一些验证,接着,将AComponent(即Button1)的Owner(即TButton内部的FOwner变量)设置为self(即Panel1)。

这些在classes.pas单元(C++ Builder中对应的是classes.hpp吧)。

读书人网 >.NET

热点推荐