class Object { public: Object() {} virtual ~Object() {} virtual const char* classname() const { return "Object"; } virtual Object* self() { return this; } }; class Derived : public Object { public: Derived() {} virtual ~Derived() {} virtual const char* classname() const { return "Derived"; } };