#include #include using namespace std; /** * base class A with virtual destructor */ class A { public: virtual ~A() { } }; /** * class B is a A */ class B : public A { }; /** * class C is a B */ class C : public B { }; /** * main */ int main() { A *a = new A; A *b = new B; A *c = new C; // ok, c is of class C that inherits of B B *p = dynamic_cast(c); // not ok ! will return NULL B *q = dynamic_cast(a); cout << "p = " << p << endl; cout << "q = " << q << endl; return EXIT_SUCCESS; }