I'm trying to extend someone else's API for my own purposes, and I'm trying to get my head around class inheritance in that context.
I've written this minimal program:
    #include 
    class first_class {
    public:
        first_class() {};
    };
    class second_class : first_class {
    private:
        int y;
    public:
        int get_y() { return y; }
        second_class() {
            y=99;
        }
    };
    int main() {
        first_class* a = new first_class();
        second_class* b = new second_class();
        int q = ((second_class*)a)->get_y();
        printf("%d\n",q);
        int r = b->get_y();
        printf("%d\n",r);
    }
first_class does nothing at all, and has no members. second_class inherits from first_class, but adds a private member y and a getter function, get_y();
When I call get_y() on an instance of second_class, it works as expected. When I call get_y() on instance of first_class, which I have cast to second_class, it returns 0.
Is that what should be expected? Are all child-class-only member variables automatically set to zero, or is that one of those usually-happens-but-not-actually-guaranteed things that compilers do sometimes, and they should actually be treated as undefined?
 
    