[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