我写一个类从TImage派生,想增加一个构造器,参数列表与TImage的不同,如何办?
type
TCard= class(TImage)
public
constructor Create(Suit: Integer; Number:Integer; Parent:TWinControl) ;
...这样的话编译时会出“Method 'Create' hides virtual method of base type 'TImage'”的警告信息,而且在建立后访问TImage的成员如Left,Top时就出访问冲突的错误。而在Create声明后面加override也不行。哪位有这方面的经验,介绍一下好不。以前在C++中可爽多了,参数列表的两个方法自动认为是不同的。
type
TCard= class(TImage)
public
constructor Create(Suit: Integer; Number:Integer; Parent:TWinControl) ;
...这样的话编译时会出“Method 'Create' hides virtual method of base type 'TImage'”的警告信息,而且在建立后访问TImage的成员如Left,Top时就出访问冲突的错误。而在Create声明后面加override也不行。哪位有这方面的经验,介绍一下好不。以前在C++中可爽多了,参数列表的两个方法自动认为是不同的。
我想在我自己的构造器中先调用TImage的构造器,再附加一些处理,怎么办?我用的下述方法出访问冲突
constructor Create(Suit: Integer; Number:Integer; Parent:TWinControl) ;
begin
TImage.Create(nil); //自行进行资源释放,不使用Owner
FSuit:= Suit;
FNumber:=Number; //FSuit和FNumber为派生类中添加的字段
Left:= 5; //此句出访问冲突,Why?
//.......
end;
我想在我自己的构造器中先调用TImage的构造器,再附加一些处理,怎么办?我用的下述方法出访问冲突
constructor Create(Suit: Integer; Number:Integer; Parent:TWinControl) ;
begin
TImage.Create(nil); //自行进行资源释放,不使用Owner
FSuit:= Suit;
FNumber:=Number; //FSuit和FNumber为派生类中添加的字段
Left:= 5; //此句出访问冲突,Why?
//.......
end;
Parent:TWinControl) ;reintroduce;overload;
Parent:TWinControl) ;reintroduce;override;
begin
inherited;
//......
end;
下面这样用(原形可能不正确)
constructor Create(Suit: Integer; Number:Integer;
Parent:TWinControl) ;override;
begin
inherited;
//......
end;
constructor TCard.Create(Owner: TComponent; Suit: Integer; Number:Integer; Parent:TWinControl) ;
begin
inherited Create(Owner);
end;
begin
inherited create(Parent);//////////////////////////////important! TImage.Create(nil); //自行进行资源释放,不使用Owner
FSuit:= Suit;
FNumber:=Number; //FSuit和FNumber为派生类中添加的字段
Left:= 5; ////////OK!
//.......
end;
TCard= class(TImage)
public
constructor Create(Suit: Integer; Number:Integer; Parent:TWinControl);reintroduce;
...//reintroduce 是正确的,你确实引入了一个新的构造器!!
//但你可能还是需要继承基类的构造器的行为,因此在实现构造器的时候,调用 inherited Create()TCard.Create(Suit: Integer; Number:Integer; Parent:TWinControl);
begin
inherited Create(nil);//按理说,你少了一个 AOwner:TComponent 参数,只能传 nil 了,即没有 Owner。
...
end;