#include <typeinfo>
#include <iostream>
using namespace std;

class A {
public:
	virtual void do_it() { cout << "I'm an A" << endl; }
};
class B : public A {
public:
	void do_it() { cout << "I'm an B" << endl; }
};

class C : public A {
public:
	class D {};
	D d;
	void do_it() { cout << "I'm an C" << endl; }
};

int main(void) {
	A a;
	B b;
	C c;
	A* obj;

        cout << typeid(obj).name() << endl;
	obj = &a;
	cout << typeid(*obj).name() << endl;
	obj = &b;
	cout << typeid(*obj).name() << endl;
	if (typeid(*obj) == typeid(b))
		cout << "on pointe un B" << endl;
	obj = &c;
	cout << typeid(*obj).name() << endl;
	C* cobj = dynamic_cast<C*>(obj);
        cout << typeid(cobj->d).name() << endl;

	return 0;
} 
