ВУЗ:
Составители:
Рубрика:
3.В определении типов,составляющих иерархию,должны обязатель-
но определяться конструкторы типов, производящих инициализа-
цию соответствующих объектов и обеспечивающих взаимосвязь с
таблицей виртуальных функций,которую строит компилятор в этом
случае.В итоге все объекты,сконструированные этими конструк-
торами,имеют связь с таблицей виртуальных функций соответству-
ющего типа.
Важно отметить,что таблица виртуальных функций - одна для
каждого типа,а не у каждой переменной того или иного типа.Пе-
ременная,или объект,лишь держит связь с таблицей своего типа,
которую установил конструктор.Когда в программе встречается
полиморфный объект,имеющий виртуальные функции,производится
идентификация его типа,после чего по указанной связи находят-
ся реализации виртуальных функций,соответствующие установлен-
ному типу пoлиморфного объекта.Все это делается во время ис-
полнения программы.Более того,если тип Z наследует от типа Y
виртуальную функцию,вызывающую другие функции,то последние
вызовы будут относиться к функциям типа Z,а не Y.В случае
статических методов все было бы наоборот:вызовы не "верну-
лись" бы в Z.
Напишем программу печати полиморфного объекта с использо-
ванием виртуальных полиморфных функций:
class Location /*-базовый класс позиция; */
{ int x,y;/*-координаты точки экрана: */
public: /*-открытая часть класса; */
Location(int InitX,int InitY)/*-конструктор точки;*/
{ x=InitX;/*-инициализация абсциссы; */
y=InitY;/*-инициализация ординаты; */
}/*-конец определения конструктора точки; */
~Location() { } /*-пустой деструктор класса; */
virtual void Print() const=0;/*-чисто виртуаль- */
/* ная функция; */
};/*-конец определения базового класса позиция; */
38
3.В определении типов,составляющих иерархию,должны обязатель- но определяться конструкторы типов, производящих инициализа- цию соответствующих объектов и обеспечивающих взаимосвязь с таблицей виртуальных функций,которую строит компилятор в этом случае.В итоге все объекты,сконструированные этими конструк- торами,имеют связь с таблицей виртуальных функций соответству- ющего типа. Важно отметить,что таблица виртуальных функций - одна для каждого типа,а не у каждой переменной того или иного типа.Пе- ременная,или объект,лишь держит связь с таблицей своего типа, которую установил конструктор.Когда в программе встречается полиморфный объект,имеющий виртуальные функции,производится идентификация его типа,после чего по указанной связи находят- ся реализации виртуальных функций,соответствующие установлен- ному типу пoлиморфного объекта.Все это делается во время ис- полнения программы.Более того,если тип Z наследует от типа Y виртуальную функцию,вызывающую другие функции,то последние вызовы будут относиться к функциям типа Z,а не Y.В случае статических методов все было бы наоборот:вызовы не "верну- лись" бы в Z. Напишем программу печати полиморфного объекта с использо- ванием виртуальных полиморфных функций: class Location /*-базовый класс позиция; */ { int x,y;/*-координаты точки экрана: */ public: /*-открытая часть класса; */ Location(int InitX,int InitY)/*-конструктор точки;*/ { x=InitX;/*-инициализация абсциссы; */ y=InitY;/*-инициализация ординаты; */ }/*-конец определения конструктора точки; */ ~Location() { } /*-пустой деструктор класса; */ virtual void Print() const=0;/*-чисто виртуаль- */ /* ная функция; */ };/*-конец определения базового класса позиция; */ 38
Страницы
- « первая
- ‹ предыдущая
- …
- 36
- 37
- 38
- 39
- 40
- …
- следующая ›
- последняя »