class C : public A { \fbox{C} public: enum { PERSON = 0 , STUDENT }; C() { roles[PERSON]=0; roles[STUDENT]=0; role(0); default role } A* operator->() { return roles [role]; } void role( int r ); role switching protected: int _role; A* roles[2]; };