#include " stdafx.h " class Inter ... {public: virtual void* GetInter(int i) =0;} ; class In0 ... {public: virtual void P0() =0;} ; class In1 ... {public: virtual void P1() =0;} ; class Imp : public Inter, public In0, public In1 ... {public: /**//** * losted type **/ virtual void* GetInter(int i) ...{ switch( i ) ...{ case 0 : ...{ /**//** * cast to In0* **/ return (In0*)this; } case 1 : ...{ return (In1*)this; } default: break; } return NULL; } virtual void P0() ...{ std::cout<<"p0...."<<std::endl; } virtual void P1() ...{ std::cout<<"p1...."<<std::endl; }} ; int _tmain( int argc, _TCHAR * argv[]) ... { Inter* b = new Imp(); /**//** * virtual ptr inter, in0, in1 **/ In0* in0 = (In0*)b->GetInter(0); if ( in0 ) ...{ in0->P0(); } return 0;}