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

UptoLike

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

Когда полиморфные функции определены статически по иерар-
хии составных типов,поиск нужной функции при вызове произво-
дится компилятором в следующем порядке:
1.При вызове функции компилятор устанавливает тип объекта,
для которого вызывается эта функция.
2.Установив тип,компилятор ищет функцию в пределах этого
типа и, найдя ее здесь,компилятор назначает вызов этой функ-
ции.
3.Если указанная функция не найдена,то компилятор начинает
рассматривать его базовый тип и ищет в нем функцию,имя кото-
рой указано в вызове.В случае,если функция с таким именем
найдена и типы аргументов и параметров отождествляются,то
найденная функция вызывается.
4.Если же искомая функция отсутствует в базовом типе,то
компилятор переходит к следующему по иерархии базовому типу,
где и осуществляет дальнейший поиск.Процесс продолжается до
тех пор,пока вызванная функция не будет найдена,иначе компи-
лятор выдает сообщение об ошибке.
5.Если функция,найденная в рассматриваемой иерархии типов,
вызывает другие функции иерархии,то поиск этих функций будет
начинаться с места определения указанной функции в направле-
нии к родительским типам,даже если потомки имеют собственные
функции с такими же именами и параметрами.
Приведем примеры использования статического полиморфизма
функций:
class Location /*-базовый класс позиция: */
{ int x,y;/*-координаты точки экрана; */
public: /*-открытая часть класса: */
Location(int InitX,int InitY) /*-конструктор точки*/
{ x=InitX; /*-инициализация абсциссы; */
y=InitY; /*-инициализация ординаты; */
} /*-конец определения конструктора точки;*/
~Location() { } /*-пустой деструктор класса позиция;*/
int GetX() { return x; } /*-возвращает абсциссу; */
int GetY() { return y; } /*-возвращает ординату; */
void Print(){ cout<<"\nLocation";}
/*-печать имени класса; */
};/*-конец определения базового класса позиция; */
35
 Когда полиморфные функции определены статически по иерар-
хии составных типов,поиск нужной функции при вызове произво-
дится компилятором в следующем порядке:
  1.При вызове функции компилятор устанавливает тип объекта,
для которого вызывается эта функция.
  2.Установив тип,компилятор ищет функцию в пределах этого
типа и, найдя ее здесь,компилятор назначает вызов этой функ-
ции.
  3.Если указанная функция не найдена,то компилятор начинает
рассматривать его базовый тип и ищет в нем функцию,имя кото-
рой указано в вызове.В случае,если функция с таким именем
найдена и типы аргументов и параметров отождествляются,то
найденная функция вызывается.
  4.Если же искомая функция отсутствует в базовом типе,то
компилятор переходит к следующему по иерархии базовому типу,
где и осуществляет дальнейший поиск.Процесс продолжается до
тех пор,пока вызванная функция не будет найдена,иначе компи-
лятор выдает сообщение об ошибке.
  5.Если функция,найденная в рассматриваемой иерархии типов,
вызывает другие функции иерархии,то поиск этих функций будет
начинаться с места определения указанной функции в направле-
нии к родительским типам,даже если потомки имеют собственные
функции с такими же именами и параметрами.
  Приведем примеры использования статического полиморфизма
функций:
  class Location /*-базовый класс позиция:                     */
           { int x,y;/*-координаты точки экрана;               */
       public: /*-открытая часть класса:                       */
             Location(int InitX,int InitY) /*-конструктор точки*/
                     { x=InitX; /*-инициализация абсциссы;     */
                       y=InitY; /*-инициализация ординаты;     */
                     } /*-конец определения конструктора точки;*/
           ~Location() { } /*-пустой деструктор класса позиция;*/
        int GetX() { return x; } /*-возвращает абсциссу;       */
        int GetY() { return y; } /*-возвращает ординату;       */
       void Print(){ cout<<"\nLocation";}
                                 /*-печать имени класса;       */
          };/*-конец определения базового класса позиция;      */
                               35