Эта программа не делает различий между дисковым и кнопочным телефонами, и она не поддерживает платные телефоны, когда пользователь должен заплатить 25 центов, чтобы позвонить.
Поскольку вы знаете наследование, то примете решение породить классы touch_tone и pay_phone из класса phone, как показано ниже:
class touch_tone : phone
{ public: void dial(char * number) { cout << "Пик пик Набор номера " << number << endl; } touch_tone(char *number) : phone(number) { } };
pay_phone(char *number, int amount) : phone(number) { pay_phone::amount = amount; } private: int amount; };
Как видите, классы touch_tone и pay_phone определяют свой собственный метод dial. Если вы предположите, что метод dial класса, phone основан на дисковом телефоне, то вам не потребуется создавать класс для дискового телефона.
Следующая программа NEWPHONE.CPP использует эти классы для создания объектов rotary, touch_tone и pay_phone:
Если вы откомпилируете и запустите эту программу, на экране дисплея появится следующий вывод:
Набор номера 602-555-1212
Пик пик Набор номера 212-555-1212
Пожалуйста, оплатите 25 центов
Набор номера 212-555-1212
Как уже упоминалось, полиморфный объект представляет собой такой объект, который изменяет форму во время выполнения программы. Предыдущая программа, например, не использовала полиморфные объекты. Иначе говоря, в ней нет объектов, которые бы изменяли форму.