Объектно-ориентированный язык программирования С++ в примерах. Сивохин А.В. - 37 стр.

UptoLike

Составители: 

Приведена также функция печати полиморфного объекта для
случая виртуального полиморфизма,рассматриваемого ниже.
Вот примеры использования всех этих функций:
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