[fpc-devel] virtual override with diff in default ?
n7800
n7800 at inbox.ru
Wed Oct 23 00:19:20 CEST 2024
Let me also share the results of tests for method pointers with different default values. The example is a bit convoluted, but it shows all possible combinations. It turns out that any component event definition always overrides the default values from the class.
program Project1;
type
TTest = class
procedure test(a: string; b: string = 'class');
end;
TReq = procedure (a, b: string) of object;
TOpt = procedure (a: string = 'def1'; b: string = 'def2') of object;
procedure TTest.test(a: string; b: string);
begin
writeln(a, ', ', b);
end;
var
lReq: TReq;
lOpt: TOpt;
lTest: TTest;
begin
lTest := TTest.Create;
lReq := @lTest.test;
lOpt := @lTest.test;
lReq('req1', 'req2');
lOpt;
TOpt(lReq);
TReq(lOpt)('opt1', 'opt2');
end.
>Среда, 23 октября 2024, 2:28 +05:00 от Martin Frb via fpc-devel <fpc-devel at lists.freepascal.org>:
>
>Is the below meant to be allowed?
>It compiles, it also compiles if you have no default in the base, but a
>default in the sub class.
>
>type
> TFoo = class
> procedure Bar (const Item: String; AnObject: TObject = nil); virtual;
> end;
> TFoo2 = class(TFoo)
> procedure Bar (const Item: String; AnObject: TObject); override;
> end;
>
>
>It even works with both having a diff default.
>
> TFoo = class
> procedure Bar (const Item: String; AnObject: integer = 1); virtual;
> end;
> TFoo2 = class(TFoo)
> procedure Bar (const Item: String; AnObject: integer=2); override;
> end;
>
>_______________________________________________
>fpc-devel maillist - fpc-devel at lists.freepascal.org
>https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20241023/04702fde/attachment.htm>
More information about the fpc-devel
mailing list