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