int main() { { Sorcerer robert("Robert", "the Magnificient"); Victim jim("Jimmy"); Peon joe("Joe"); std::cout << robert << jim << joe; robert.polymorph(jim); robert.polymorph(joe); } { Victim joe("Joe"); Victim sarah = joe; Victim bob(sarah); std::cout << joe << sarah << bob; joe.getPolymorphed(); sarah.getPolymorphed(); bob.getPolymorphed(); Peon pepe("Pepe"); Peon carl = pepe; Peon martin(carl); Victim bobby = martin; Victim sar(carl); std::cout << pepe << carl << martin << bobby << sar; } return 0; }
void Sorcerer::polymorph(Victim const & victim) const { victim.getPolymorphed(); return ; }
void Sorcerer::polymorph(Victim const &src) { src.getPolymorphed(); }
void Sorcerer::polymorph( Victim const & arg ) const { arg.getPolymorphed(); }
void Sorcerer::polymorph(const Victim& vic) const { vic.getPolymorphed(); }
void Sorcerer::polymorph(Victim const &v) const { v.getPolymorphed(); }