> reintroduce is used to hide ancestor constructors
> reintroduce is used to show ancestor constructors
我一直试图理解这一切,所以这是另一个非常具体的问题,supporting my main question dealing with constructors.
更新:替换了整个问题:
TComputer = class(TObject) public constructor Create(Teapot: string=''); end; TCellPhone = class(TComputer) public constructor Create(Cup: Integer); overload; virtual; constructor Create(Cup: Integer; Teapot: string); overload; virtual; end;
构建TCellPhone时,可以使用3个构造函数:
>杯子:整数
>杯子:整数;茶壶:字符串
> [茶壶:String =”]
问题:为什么没有隐藏构造函数(Teapot:string =”)?
现在我添加了第三个后代:
TComputer = class(TObject) public constructor Create(Teapot: string=''); end; TCellPhone = class(TComputer) public constructor Create(Cup: Integer); overload; virtual; constructor Create(Cup: Integer; Teapot: string); overload; virtual; end; TiPhone = class(TCellPhone) public constructor Create(Cup: Integer); override; end;
在构建TiPhone时,可以使用四个构造函数:
>杯子:整数
>杯子:整数
>杯子:整数;茶壶:字符串
> [茶壶:string =”]
为什么有四个构造函数?我超越了现有的三个之一.编辑:这可能是代码洞察中的一个错误,它向我展示了四个 – 但当两个相同时我怎么可能调用呢.
再次使用原始代码:
TComputer = class(TObject) public constructor Create(Teapot: string=''); end; TCellPhone = class(TComputer) public constructor Create(Cup: Integer); overload; virtual; constructor Create(Cup: Integer; Teapot: string); overload; virtual; end;
已经知道TCellPhone有三个构造函数:
>杯子:整数
>杯子:整数;茶壶:字符串
> [茶壶:String =”]
如何更改TCellPhone的声明以隐藏祖先构造函数?例如以便:
TNokia = class(TCellPhone) end;
将只有两个构造函数:
>杯子:整数
>杯子:整数;茶壶:字符串
现在针对重新引入用于隐藏非虚拟祖先的情况.在之前的案例中,TiPhone有四个构造函数(理想情况下只有两个 – TC计算机以某种方式隐藏其祖先).但即使我无法修复TC计算机,我也可以将TiPhone更改为只有一个:
TComputer = class(TObject) public constructor Create(Teapot: string=''); end; TCellPhone = class(TComputer) public constructor Create(Cup: Integer); overload; virtual; constructor Create(Cup: Integer; Teapot: string); overload; virtual; end; TiPhone = class(TCellPhone) public constructor Create(Cup: Integer); reintroduce; end;
现在TiPhone只有一个构造函数:
>杯子:整数
重新引入通常仅用于抑制隐藏虚拟祖先的警告.在这种情况下:
Create(Teapot: string = '')
不是虚拟的 – 但我仍然可以使用重新引入来隐藏它.
但现在,如果我添加另一个重载到TiPhone:
TiPhone = class(TCellPhone) public constructor Create(Cup: Integer); reintroduce; overload; constructor Create(Handle: String); overload; end;
然后突然(先前隐藏的)祖先回来了:
> TiPhone.Create(7);
> TiPhone.Create(‘pink’);
> TiPhone.Create(7,’pink’);
> TiPhone.Create();
正如你所看到的,我正在努力理解它的逻辑
>什么东西被隐藏了
>如何隐藏某些东西
>什么时候出现
>如何展示一些东西