[fpc-devel] Visibility of overloaded ancestor method from a child class
Michał Gawrycki
michal.gawrycki at gmsystems.pl
Fri Feb 7 20:27:48 CET 2025
From documentation:
If the overload keyword is not present, then all overloaded versions
must reside in the same unit, and if it concerns methods part of a
class, they must be in the same class, i. e. the compiler will not look
for overloaded methods in parent classes if the overload keyword was not
specified.
https://www.freepascal.org/docs-html/ref/refse96.html
Regards, Michał.
W dniu 2025-02-07 o 14:23, Maxim Ganetsky via fpc-devel pisze:
> Hello.
>
> The following program does not compile, because overloaded AddItem(s:
> string) method in ancestor is not visible from child class. Is it normal?
>
> program Test;
> {$MODE OBJFPC}
> type
> TBase = class
> public
> procedure AddItem(s: string; i: integer); virtual;
> procedure AddItem(s: string);
> end;
> TDesc = class(TBase)
> public
> procedure AddItem(s: string; i: integer); override;
> end;
>
> procedure TDesc.AddItem(s: string; i: integer);
> begin
> writeln('TDesc(s,a) ', s, ' ', i);
> end;
> procedure TBase.AddItem(s: string; i: integer);
> begin
> writeln('TBase(s,a) ', s, ' ', i);
> end;
> procedure TBase.AddItem(s: string);
> begin
> AddItem(s, 123);
> end;
>
> var
> lBase: TBase;
> lDesc: TDesc;
> begin
> lBase := TBase.Create;
> lDesc := TDesc.Create;
> lBase.AddItem('test'); // OK
> lDesc.AddItem('test'); // Error: Wrong number of parameters specified
> for call to "AddItem"
> readln;
> end.
>
--
GM Systems
ul. K.Marksa 9
58-260 Bielawa
tel. +48 694 178 276
http://www.gmsystems.pl/
More information about the fpc-devel
mailing list