class JunkBase { public: virtual void DoSomething( void ) = 0; protected: virtual ~JunkBase( void ) {} JunkBase( void ) {} }; class Junk : protected JunkBase { public: Junk( void ) : JunkBase() {} virtual ~Junk( void ) {} protected: inline JunkBase * AsBase( void ) { return dynamic_cast< JunkBase * >( this ); } virtual void DoSomething( void ) { } };