#include "bar.h" class Spam : public Bar { public: Spam() { } ~Spam() { } virtual void A() { printf("I'm Spam::A\n"); } void B() { printf("I'm Spam::B\n"); } virtual Base *toBase() { return static_cast<Base *>(this); } virtual Bar *toBar() { return static_cast<Bar *>(this); } static Spam *fromBase(Base *b) { return dynamic_cast<Spam *>(b); } };