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吧)。