Access child members within parent class, C++

c++, inheritance

Solution

The only clean way is to use the virtual function approach.

If the `Parent` class has at least one virtual function (not necessarily `DoSomething`), there's also a yucky way to do it:

void DoSomething() {
    if (Child1* child = dynamic_cast<Child1*>(this)) {
        child->childMember = 0;
    } else if (Child2* child = dynamic_cast<Child2*>(this)) {
        child->childMember = 0;
    } // and so on, and so forth
}

(If `Parent` has no virtual functions, then the `dynamic_cast` won't work. Though, any class designed to be inherited from should have at least one virtual function, even if it's just the destructor.)

Problem

I am facing a situation where I need to access child member variables inside the parent class. I know this is against OO principles but I have to deal with a scenario where hundreds of classes are inheriting from one and along the way half of them stopped using one of the parents variable, and declared and used their own (there was need to switch from int to int[] and apparently the person who did that didn't take in consideration to apply this changes in the parent class instead). One option is to have a virtual function to deal with it, but this means I have to change the code in hundreds of file/objects and test each one of them. Hence I thought if it is possible to use some old school C pointer magic to gain access to this variables inside the parent method, this will eliminate the need of hundreds of virtual functions. Basically this is what I want to achieve: ``` class Parent { void DoSomething() { // This is what I need childMember = 0; } } class Child1 : Parent { int childMember; } class Child2 : Parent { int childMember; } ``` Please let me know if this is even possible. If yes how do I achieve that. Other suggestions are welcomed, but keep in mind that I'd like to make changes only in the parent class. TIA.

Original source