class A
{
// defn containing at least one virtual method
};
class B : public A
{
// defns for B
};
class C : public A
{
// defns for C
};
Here, we have both classes B and C derived from A. Class A has at least one virtual methods to make it polymorphic. Now, consider the following code:
{
A *pA;
B myB, *pB;
C myC, *pC;
pA = &myC; // a cast is implicit here
pB = dynamic_cast<B*>(pA);
pC = dynamic_cast<C*>(pA);
if (pB)
{
// do something with pB
}
else if (pC)
{
// do something with pC
}
}
Because a failed dynamic cast returns a NULL pointer, we can use that as a hint to determine the
actual type of an object pointed to by a superclass pointer.