Почемувездевызванметод базовогокласса?
Проблемазаключаетсявтом,что,с точкизрениякомпилятора,массив
Performer * performers[3] хранитв себетриуказателянаобъектыкласса Performer,хотяпривыполнении программыэтосовсемнетак!
Выходиспользованиепозднего связывания.
Позднеесвязывание
Припозднемсвязывании(late/dynamic binding) адресаметодовопределяются динамическивовремявыполнения программы,анестатическипри компиляции.
Простойпример:указательнафункцию.
Длятого,чтобыдинамическоесвязывание работалодляобъектов,полиморфный методобъявляетсясключевымсловом virtual.
Добавимвклассemployee полиморфный методprint:
class employee { public:
virtual void print() {} };
class manager : public employee {};