On Saturday, December 22, 2012 21:44:33 Steve D wrote:
> Hello,
> How can I get class B's array printed, using inherited A's
> function? (Dmd 2.060)
> 
>      class A {
>          static float[3] hi = 1;
> 
>          void f() { writefln("hi %s",hi); }
>      }
> 
>      class B : A {
>          static float[3] hi = 2;
>      }
> 
>      B b = new B();
>      b.f();     // prints 'hi [1,1,1]'
>                 // can I get it to use B's overridden hi: [2,2,2] ?
> 
> Thanks for your help :)
> Steve

Functions can be overriden. Variables can't be. So, when hi is used, it'll be 
the one in the class that it's used in unless you specifically specify the one 
to use (e.g. A.hi or B.hi), and simply changing hi to a function won't help 
you, because static functions are never virtual (they have no this pointer, so 
there's no way to look up which version of the function to call). So, if you 
want hi to be overridable, it'll have to be a public or protected member 
function rather than a variable or static function.

- Jonathan M Davis

Reply via email to