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

UptoLike

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

1.4.3.Полиморфизм составных объектов
Помимо возможности описывать иерархическую структуру пред-
метной области с помощью аппарата производных типов,обеспечи-
вающих прозрачный,полупрозрачный и непрозрачный доступ к их
базовому типу,необходимо также иметь гибкие средства обработки
объектов,находящихся на различных уровнях этой иерархии - по-
лиморфных объектов.Для создания полиморфного объекта использу-
ются операторы присваивания или вызовы функций, работающие с
указателями или ссылками на составные типы:объект производного
типа при использовании его указателя или ссылки,можно рассмат-
ривать как объект его базового типа.Другими словами, если про-
изводный тип SymbolLocation имеет открытый базовый тип Locati-
on,то указатель или ссылку на SymbolLocation можно присваивать
переменной соответственно типа указатель или ссылка на Locati-
on,не используя явное преобразование типа.Аналогично,если про-
изводный тип SymbolLocation имеет открытый базовый тип Locati-
on,то указатель или ссылка на SymbolLocation можно передавать
в качестве аргумента параметру соответственно типа указатель
или ссылка на Location,точно так же не используя явное преоб-
разование типа.Обратное преобразование указателя или ссылки на
Location соответственно в указатель или ссылку на SymbolLoca-
tion должно быть явным.Такие присваивания и вызовы функций,как
правило,имеют место в связи с использованием виртуальных функ-
ций.
Приведем несколько примеров использования полиморфных объек-
тов,реализуемых указателями и ссылками в операторах присваива-
ния,а также в вызовах внешних функций Print(),параметрами ко-
торых являются соответственно указатель и ссылка на базовый
тип:
class Location /*-базовый класс позиция; */
{ int x,y;/*-координаты точки экрана: */
public: /*-открытая часть класса; */
Location(int InitX,int InitY)/*-конструктор точки;*/
{ x=InitX;/*-инициализация абсциссы; */
y=InitY;/*-инициализация ординаты; */
}/*-конец определения конструктора точки; */
40
            1.4.3.Полиморфизм составных объектов


 Помимо возможности описывать иерархическую структуру пред-
метной области с помощью аппарата производных типов,обеспечи-
вающих прозрачный,полупрозрачный и непрозрачный доступ к их
базовому типу,необходимо также иметь гибкие средства обработки
объектов,находящихся на различных уровнях этой иерархии - по-
лиморфных объектов.Для создания полиморфного объекта использу-
ются операторы присваивания или вызовы функций, работающие с
указателями или ссылками на составные типы:объект производного
типа при использовании его указателя или ссылки,можно рассмат-
ривать как объект его базового типа.Другими словами, если про-
изводный тип SymbolLocation имеет открытый базовый тип Locati-
on,то указатель или ссылку на SymbolLocation можно присваивать
переменной соответственно типа указатель или ссылка на Locati-
on,не используя явное преобразование типа.Аналогично,если про-
изводный тип SymbolLocation имеет открытый базовый тип Locati-
on,то указатель или ссылка на SymbolLocation можно передавать
в качестве аргумента параметру соответственно типа указатель
или ссылка на Location,точно так же не используя явное преоб-
разование типа.Обратное преобразование указателя или ссылки на
Location соответственно в указатель или ссылку на SymbolLoca-
tion должно быть явным.Такие присваивания и вызовы функций,как
правило,имеют место в связи с использованием виртуальных функ-
ций.
  Приведем несколько примеров использования полиморфных объек-
тов,реализуемых указателями и ссылками в операторах присваива-
ния,а также в вызовах внешних функций Print(),параметрами ко-
торых являются соответственно указатель и ссылка на базовый
тип:


  class Location /*-базовый класс позиция;                     */
          { int x,y;/*-координаты точки экрана:                */
       public: /*-открытая часть класса;                       */
             Location(int InitX,int InitY)/*-конструктор точки;*/
                    { x=InitX;/*-инициализация абсциссы;       */
                      y=InitY;/*-инициализация ординаты;       */
                    }/*-конец определения конструктора точки; */
                              40