[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