[fpc-pascal] The "overload" keyword

Xiangrong Fang xrfang at gmail.com
Wed Nov 13 03:35:05 CET 2013


Hi All,

According to http://www.freepascal.org/docs-html/ref/refsu72.html,

the overload keyword is mostly optional and for delphi compatiblity only.
But on Oct. 27, Sven replied my question about hide a public constructor in
base class:

>>  I don't understand why this does not work:
>> f := TFileStream.Create;
>>
>> I know that TFileStream's Create require a file name parameter, but as
TFileStream is
>> inherited from TObject, which has a Create without parameter.  This is
why I feel that it
>> is possible to HIDE a public constructor from ancestor.

> No, I don't think so. If you want users to use the original constructor
as well you'd need to
> declare yours as "overload". If it would be possible to call TFileStream.Create
without
> parameters then the instance would be in an inconsistent state, so only
calling the
> constructor with arguments should be possible (which is the case for
TFileStream.

> So this is definitely by design.

Now my question is: in this case overload keyword DO make a difference?
Then, how to overload? e.g.:

In base class:

constructor Create;

In child class:

constructor Create(param1:...; param2: ...): overload;

i.e. overload does NOT require functions to have same parameter list or
return type? Also, it does not require the overload keyword in base class?
Otherwise programmers need to modify the base class, which is not good.

Thanks,

Xiangrong
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20131113/4aa576eb/attachment.html>


More information about the fpc-pascal mailing list