[fpc-pascal] non-virtual class methods called from virtual regular method

Michael Van Canneyt michael at freepascal.org
Thu Apr 29 09:26:30 CEST 2021



On Thu, 29 Apr 2021, LacaK via fpc-pascal wrote:

> Hi *,
>
> consider the following example
>
> T1 = class
>   class procedure CP1;
>   procedure P1; virtual;
> end;
>
> T2 = class(T1)
>   class procedure CP1;
> end;
>
> procedure T1.P1;
> begin
>   CP1; // here is called allways T1.CP1, right?
>   // if I want call T2.CP1 then class procedure CP1 must be also 
> virtual, right?

Yes

>   // so Self.CP1 does not take runtime type but is staticaly resolved 
> at compile time to T1.CP1 ?

Yes.

> end;
>
> var
>   c1: T1;
>
> begin
>   c1:=T2.Create;
>   c1.P1; // here is called T2.P1 - runtime class type
> end.
>
> Thanks
>
> Btw If I need for various class descendants define various class 
> constants, it is possible only by using class functions (getters), where 
> descendant class getter hides parents getter?

If they depend on the class, they're not "constants" to begin with, so a
getter function is the right approach. For such purposes I use virtual class
functions.

Michael.


More information about the fpc-pascal mailing list