ВУЗ:
Составители:
Рубрика:
109
func (fp); // Вызов func (void*).
Если в программе используются несколько уровней производных
классов, то при выполнении неявных преобразований типа указателя
ищется класс “ближайшего” уровня:
class Base {…};
class A: public Base {…};
class B: public A{…};
func (Base*);
func (A*);
…
B *db;
func (db); // Вызов функции func (A*).
20. Полиморфизм
Одно из самых коротких и выразительных определений полимор-
физма таково: полиморфизм – это функциональная возможность, позво-
ляющая старому коду вызвать новый. Это свойство дает возможность
расширять и совершенствовать программную систему, не затрагивая
существующий код. Осуществляется такой подход с помощью меха-
низма виртуальных функций.
20.1. Раннее и позднее связывание
К механизму виртуальных функций обращаются в тех случаях,
когда в базовый класс необходимо поместить функцию, которая должна
по-разному выполняться в производных классах. Точнее, по-разному
должна выполняться не единственная функция из базового класса, а в
каждом производном классе требуется свой вариант этой функции.
Предположим, необходимо написать функцию-член CalculatePay()
(Расчет), которая подсчитывает для каждого объекта класса Employee
(Служащий) ежемесячные выплаты. Все просто, если зарплата рассчи-
тывается одним способом: можно сразу вставить в вызов функции тип
нужного объекта. Проблемы начинаются с появлением других форм оп-
латы. Допустим, уже есть класс Employee, реализующий расчет зарпла-
ты по фиксированному окладу. А что делать, чтобы рассчитать зарплату
контрактников – ведь это уже другой способ расчета! В процедурном
подходе пришлось бы переделать функцию, включив в нее новый тип
обработки, так как в прежнем коде такой обработки нет. Объектно-
ориентированный подход благодаря полиморфизму позволяет произво-
дить различную обработку.
Страницы
- « первая
- ‹ предыдущая
- …
- 105
- 106
- 107
- 108
- 109
- …
- следующая ›
- последняя »
