Array of objects and their inheritance

tired_eyes via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu May 14 12:00:15 PDT 2015


Hi.
I'm having a hard time understanding D's inheritance. Consider 
the following code:


class Parent {
     public int x = 10;
}

class Child : Parent {
     public int y = 20;
}

void main() {
     import std.stdio;

     Parent[] array;

     auto obj1 = new Parent();
     auto obj2 = new Child();

     array ~= obj1;
     array ~= obj2;

     writeln(array[0]); // prints "Parent", as expected
     writeln(array[1]);  // prints "Child", so I assume that if 
it's a Child, we can access Child's fields

     writeln(array[0].x); // 10
     writeln(array[1].y); // Error: no property 'y' for type 
'Parent'
}


First, I don't understand why we see array[2] as 'Child'. While 
it is a 'Child', shouldn't it be shown as a 'Parent' due to we 
explicitly create an array of 'Parents'?

Well, if it's still a 'Child', why we can't access it's fields? 
And what is the proper way of storing a collection of inherited 
objects without losing access to their fields and methods?

Please point me in the right direction. I'm (still) relatively 
new to D, and will appreciate any help.


More information about the Digitalmars-d-learn mailing list