Ian*_*oyd 20 delphi overloading
考虑假设的对象层次结构,从以下开始:
TFruit = class(TObject)
public
constructor Create(Color: TColor); virtual;
end;
Run Code Online (Sandbox Code Playgroud)
及其后代:
TApple = class(TFruit)
public
constructor Create(); overload; virtual;
constructor Create(Color: TColor); overload; override; //deprecated. Calls other constructor - maintaining the virtual constructor chain
end;
Run Code Online (Sandbox Code Playgroud)
这里的想法是我已经覆盖了基类的虚构造函数,其重载也恰好是虚拟的.
德尔福抱怨:
方法'Create'隐藏基类型'TFruit'的虚方法
除了它不隐藏它 - 它就在那里!
这是怎么回事?
NGL*_*GLN 27
两种解决方案
type
TFruit = class(TObject)
public
constructor Create(Color: TColor); virtual;
end;
TApple = class(TFruit)
public
constructor Create(); reintroduce; overload;
constructor Create(Color: TColor); overload; override;
end;
Run Code Online (Sandbox Code Playgroud)
要么:
type
TFruit = class(TObject)
public
constructor Create; overload; virtual; abstract;
constructor Create(Color: TColor); overload; virtual;
end;
TApple = class(TFruit)
public
constructor Create(); override;
constructor Create(Color: TColor); override;
end;
Run Code Online (Sandbox Code Playgroud)
这似乎是一个"先到先得"的问题.(NGLN似乎找到了解决方案.)
还有另一种解决方案.您可以使用默认参数:
interface
type
TFruit=class(TObject)
public
constructor Create(Color: TColor); virtual;
end;
TApple=class(TFruit)
public
constructor Create(Color: TColor = clRed); override;
end;
implementation
{ TFruit }
constructor TFruit.Create(Color: TColor);
begin
inherited Create;
end;
{ TApple }
constructor TApple.Create(Color: TColor);
begin
inherited;
end;
// Test code
var
AppleOne, AppleTwo: TApple;
begin
AppleOne := TApple.Create;
AppleTwo := TApple.Create(clGreen);
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10342 次 |
| 最近记录: |