Search code examples
c++inheritancepolymorphism

How to call child method from a parent pointer?


I have a base class and a child class extending it. The child class has its own method inside that the parent class does not have. That is, declaring it as virtual in the base class is not really an option.

class A {
  public:
    virtual void helloWorld();
};

class B : public A {
  public:
    virtual void helloWorld();
    void myNewMethod();
};

Then, in my implementation, I have a pointer to A and I constructed it as B:

// somewhere in a .cpp file
A* x;
x = new B();
x->myNewMethod(); // doesn't work

My current solution is to cast it:

((B *)x)->myNewMethod();

My question is, is there a cleaner way of doing this, or is casting the way to go?


Solution

  • My question is, is there a cleaner way of doing this, or is casting the way to go?

    A run-time cast seems to be OK in this case. However, rather than C-style casts, you should use dynamic_cast<> (in case you are not sure whether x actually points to an object of type of B):

    B* pB = dynamic_cast<B*>(x); // This will return nullptr if x does not point
                                 // to an object of type B
    if (pB != nullptr)
    {
        pB->myNewMethod();
    }
    

    On the other hand, if you are sure that x points to an object of type B, then you should use static_cast<>:

    B* pB = static_cast<B*>(x);
    pB->myNewMethod();