[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