Another, is it a bug?

Random D user via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Sep 15 19:59:04 PDT 2015


I'm trying to make a base class with get property and a sub class 
with corresponding set property. The value for the base class is 
set via constructor.
The intuitive way doesn't seem to work and workarounds are 
unnecessarily ugly (considering you'll sprinkle them all over the 
codebase).

class Father
{
     int eat()
     {
         return 1;
     }
}

class Daughter : Father
{

     void eat( int apples ) {}

     // int eat() { return super.eat(); }    // Workaround A, 
works as expected
     //override int eat( int apples ) {}     // Workaround D, 
fails -> Error: function main.Daughter.eat does not override any 
function, did you mean to override 'main.Father.eat'?
}

Daughter d = new Daughter();

// BUG? I expected this to work. It seems that compiler doesn't 
even look into parent class to see if there's a matching function.
//int num = d.eat();                // Error: function 
main.Daughter.eat (int apples) is not callable using argument 
types ()

int num2 = (cast(Father)d).eat();   // Workaround B, works as 
expected
int num3 = d.Father.eat();          // Workaround C, works as well


More information about the Digitalmars-d-learn mailing list