ВУЗ:
Составители:
Рубрика:
Приведена также функция печати полиморфного объекта для
случая виртуального полиморфизма,рассматриваемого ниже.
Вот примеры использования всех этих функций:
void main(void) /*-главная программа,использующая раз- */
/* личные объекты типов,производных от */
/* базового типа Location: */
{ Location Loc(1,1);
SymbolLocation SymLoc(1,1,'A');
StringLocation StrLoc(1,1,"ABC");
Loc.Print();/*-на экран выдается слово Location;*/
SymLoc.Print();/*-с новой позиции выдается символ; */
StrLoc.Print();/*-с новой позиции выдается строка; */
SymbolLocation* SymLocPtr=&SymLoc;
StringLocation* StrLocPtr=&StrLoc;
Print(SymLocPtr);/*-на экран выдается не символ А, */
/* а слово Location; */
Print(StrLocPtr);/*-на экран выдается не строка */
/* АВС,а слово Location; */
} /*-конец программы выдачи полиморфного объекта; */
Когда полиморфные функции с одним и тем же именем и одним
и тем же набором параметров определены по иерархии составных
типов со словом virtual,то при вызове какой-либо функции из
набора ее идентификация может быть произведена только во вре-
мя исполнения программы,так как в таких случаях при компиля-
ции неизвестен тип объекта,использующего эту функцию.Проис-
ходит это из-за полиморфности объектов составного типа,кото-
рая является обязательным атрибутом виртуальных методов.
При использовании виртуальных полиморфных функций необхо-
димо выполнять следующие условия:
1.Если базовый тип описывает функцию как виртуальную,то все
его производные типы,кoтoрые реализуют функцию с тем же име-
нем,должны описать эту функцию тоже виртуальной.Другими сло-
вами,нельзя заменять виртуальную функцию статической.
2.Если переопределяется реализация виртуальной функции,то
заголовок заново определяемой виртуальной функции в производ-
ном типе не может быть изменен.
37
Приведена также функция печати полиморфного объекта для случая виртуального полиморфизма,рассматриваемого ниже. Вот примеры использования всех этих функций: void main(void) /*-главная программа,использующая раз- */ /* личные объекты типов,производных от */ /* базового типа Location: */ { Location Loc(1,1); SymbolLocation SymLoc(1,1,'A'); StringLocation StrLoc(1,1,"ABC"); Loc.Print();/*-на экран выдается слово Location;*/ SymLoc.Print();/*-с новой позиции выдается символ; */ StrLoc.Print();/*-с новой позиции выдается строка; */ SymbolLocation* SymLocPtr=&SymLoc; StringLocation* StrLocPtr=&StrLoc; Print(SymLocPtr);/*-на экран выдается не символ А, */ /* а слово Location; */ Print(StrLocPtr);/*-на экран выдается не строка */ /* АВС,а слово Location; */ } /*-конец программы выдачи полиморфного объекта; */ Когда полиморфные функции с одним и тем же именем и одним и тем же набором параметров определены по иерархии составных типов со словом virtual,то при вызове какой-либо функции из набора ее идентификация может быть произведена только во вре- мя исполнения программы,так как в таких случаях при компиля- ции неизвестен тип объекта,использующего эту функцию.Проис- ходит это из-за полиморфности объектов составного типа,кото- рая является обязательным атрибутом виртуальных методов. При использовании виртуальных полиморфных функций необхо- димо выполнять следующие условия: 1.Если базовый тип описывает функцию как виртуальную,то все его производные типы,кoтoрые реализуют функцию с тем же име- нем,должны описать эту функцию тоже виртуальной.Другими сло- вами,нельзя заменять виртуальную функцию статической. 2.Если переопределяется реализация виртуальной функции,то заголовок заново определяемой виртуальной функции в производ- ном типе не может быть изменен. 37
Страницы
- « первая
- ‹ предыдущая
- …
- 35
- 36
- 37
- 38
- 39
- …
- следующая ›
- последняя »