static data in a sub-class
Ali Çehreli
acehreli at yahoo.com
Sat Dec 22 13:14:58 PST 2012
On 12/22/2012 12:44 PM, 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
One way is to present the data to the superclass during construction:
import std.stdio;
class A {
const float[] hi;
this(float[] hi) {
this.hi = hi;
}
void f() { writefln("hi %s",hi); }
}
class B : A {
static float[3] hi = 2;
this() {
super(hi);
}
}
void main()
{
B b = new B();
b.f();
}
Another ways is for A to require that the subclasses present the data by
a member function:
import std.stdio;
class A {
abstract float[] hi_data();
void f() { writefln("hi %s", hi_data()); }
}
class B : A {
static float[3] hi = 2;
override float[] hi_data() {
return hi;
}
}
void main()
{
B b = new B();
b.f();
}
Orthogonally, if f() is strictly on the A interface, then you can make
it a final function:
final void f() { writefln("hi %s", hi_data()); }
Ali
More information about the Digitalmars-d-learn
mailing list