person p; p.talk(); empty
p.become(Student); p.talk(); OOP
p.become(Employer); p.talk(); $$
p.become(new adult_person); p.talk(); interesting
p.become(Student); p.talk(); OOP (new student)
p.become(&p); p.talk(); $$ (old role)
p.become(Person); // initial state