多态,构造方法 ( 积分: 50 )

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

chinaandys

Unregistered / Unconfirmed
GUEST, unregistred user!
一个Form1的构造方法:
Constructor Create(..........);reintroduce;overload;
begin
end;
别一个是继承于Form1的Form2窗体也是Create构造方法的参数不同。


问题是:当重新定义Form窗体的构造方法Create,也就是各构造方法参数不同,像我这样每定义一个构造方法加了reintroduce;overload;方法实现多态,请问还有没有什么好的方法?

谢谢各位热情的解答,谢谢

 
一个Form1的构造方法:
Constructor Create(..........);reintroduce;overload;
begin
end;
别一个是继承于Form1的Form2窗体也是Create构造方法的参数不同。


问题是:当重新定义Form窗体的构造方法Create,也就是各构造方法参数不同,像我这样每定义一个构造方法加了reintroduce;overload;方法实现多态,请问还有没有什么好的方法?

谢谢各位热情的解答,谢谢

 
reintroduce 并不实现多态,只是不让编译器报警而已。

不同层次类间用Virtual,同类间overload就行了
 
type
TBase=class(TForm)
public
Constructor Create;
end;
Form1=class(TBase)
Constructor Create;virtual;

Form2=class(TBase)
Constructor Create;virtual;
 
unit Unit2;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
constructor Create(Aowner:Tcomponent;S:String);override;
end;

var
Form2: TForm2;

implementation

{$R *.dfm}
constructor TForm2.Create(Aowner:Tcomponent;S:String);
begin
inherited Create(AOwner);
self.Caption:=s;
end;
end.
 
上面的出现编译错误提示
[Error] Unit2.pas(15): Declaration of 'Create' differs from previous declaration
[Fatal Error] Unit1.pas(22): Could not compile used unit 'Unit2.pas'
 
type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
constructor Create(Aowner:Tcomponent;S:String);override;
end;
改为
constructor Create(Aowner:Tcomponent;S:String);
 
匆匆忙忙,谢谢。你所说的知道的,inherited、overload来继承、重载
 
多人接受答案了。
 
后退
顶部