Use dynamic_cast<>()
as a function, which helps you to cast down through an inheritance hierarchy (main description).
If you must do some non-polymorphic work on some derived classes B
and C
, but received the base class A
, then write like this:
class A { public: virtual ~A(){} };
class B: public A
{ public: void work4B(){} };
class C: public A
{ public: void work4C(){} };
void non_polymorphic_work(A* ap)
{
if (B* bp =dynamic_cast<B*>(ap))
bp->work4B();
if (C* cp =dynamic_cast<C*>(ap))
cp->work4C();
}