ВУЗ:
Составители:
Рубрика:
110
В таком подходе надо описать базовый класс Employee, а затем
создать производные от него классы для всех форм оплаты. Каждый
производный класс будет иметь собственную реализацию метода
CalculatePay().
Другой пример: базовый класс figure может описывать фигуру на
экране без конкретизации её вида, а производные классы triangle (тре-
угольник), ellipse (эллипс) и т.д. однозначно определяют её форму и раз-
мер. Если в базовом классе ввести функцию void show () для изображе-
ния фигуры на экране, то выполнение этой функции будет возможно
только для объектов каждого из производных классов, определяющих
конкретные изображения. В каждый из производных классов нужно
включить свою функцию void show() для формирования изображения
на экране. Доступ к функции show() производного класса возможен с
помощью явного указания ее полного имени, например:
triangle::show ();
или с использованием конкретного объекта:
triangle t;
t.show ();
Однако в обоих случаях выбор нужной функции выполняется при
написании исходного текста программы и не изменяется после компи-
ляции. Такой режим называется ранним или статическим связыванием.
Большую гибкость, особенно при использовании уже готовых
библиотек классов, обеспечивает так называемое позднее, или отложен-
ное, или динамическое связывание, которое предоставляется механиз-
мом виртуальных функций.
20.2. Виртуальные функции
Рассмотрим сначала, как ведут себя при наследовании не вирту-
альные функции-члены с одинаковыми именами, сигнатурами и типами
возвращаемых значений.
struct base {
void fun (int i) {
cout <<”base::i = ” << i << ’\n’;}
};
struct der: public base {
void fun (int i) {
Страницы
- « первая
- ‹ предыдущая
- …
- 106
- 107
- 108
- 109
- 110
- …
- следующая ›
- последняя »
