static data in a sub-class

Steve D whatchcallamit at weedline.com
Sat Dec 22 13:29:56 PST 2012


On Saturday, 22 December 2012 at 21:04:47 UTC, Jonathan M Davis 
wrote:
> 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

Ok, thanks for the info John.
Steve


More information about the Digitalmars-d-learn mailing list