[fpc-pascal]using 'overload'
Peter Vreman
peter at freepascal.org
Sun Apr 6 14:29:21 CEST 2003
At 14:09 6-4-2003, you wrote:
>Is it necessary to use the 'overload' directive in objfpc mode?
>
>E.g. this code doesn't work:
>
>{$MODE objfpc}
>Program Test2;
>
>Type
> TBaseFunClass = Class(TObject)
> Procedure DoStuff(a : Integer; b : Integer); Virtual; Abstract;
> Procedure DoStuff(a : Integer);
> End;
> TFunClass = Class(TBaseFunClass)
> Procedure DoStuff(a, b : Integer); Override;
> End;
>
>Procedure TBaseFunClass.DoStuff(a : Integer);
>
>Begin
> DoStuff(a, 0);
>End;
>
>Procedure TFunClass.DoStuff(a, b : Integer);
>
>Begin
> Writeln('TFunClass.DoStuff(', a, ',', b, ')');
>End;
>
>Var
> q : TFunClass;
>
>Begin
> q := TFunClass.Create;
> q.DoStuff(5);
> q.Destroy;
>End.
>
>fpc 1.1 says:
>...
>test2.pas(30,14) Error: Wrong number of parameters specified
>test2.pas(10,15) Hint: Found declaration: TFunClass.DoStuff(Longint,Longint)
>test2.pas(33) Fatal: There were 1 errors compiling module, stopping
>
>fpc 1.0.6 gives the same error, only without the hint :-)
>
>When I put 'overload;' everywhere it works. Is it necessary to use
>'overload;' everywhere in objfpc mode or it's just a 'feature' of the
>compiler. And what's the reason why Borland introduced the 'overload'
>directive for function overloading?
You need to define overload here because you want to explicitly overload
the functions defined in the parent class.
Without defining the overload keyword overloading will only be done in the
current scope.
When defining the overload keyword overloading will be done across the
scope, for classes and objects this will overload functions in parent
classes. And for unit level the overloading will be done across all units.
The reason for this is to be compatible with the old overloading behaviour
of FPC and also with Delphi which always requires the overload keyword and
also does this cross scope overloading
Peter
More information about the fpc-pascal
mailing list