Объектно-ориентированное программирование на языке С++. Ноткин А.М. - 21 стр.

UptoLike

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

22
TGraphObject просто нет достаточной информации для рисования чего бы
то ни было. Тем не менее присутствие метода Draw позволяет связать
функциональность (рисование) только один раз с классом TGraphObject, а
не вводить три независимые концепции для подклассов TTriangle, TCircle,
TSquare.
Имеется и вторая, более актуальная причина использования абст-
рактного метода. В объектно-
ориентированных языках программирования
со статическими типами данных, к которым относится и С++, программист
может вызвать метод класса, только если компилятор может определить,
что класс действительно имеет такой метод. Предположим, что програм-
мист хочет определить полиморфную переменную типа TGraphObject, ко-
торая будет в различные моменты времени содержать фигуры различного
типа. Это допустимо
для полиморфных объектов. Тем не менее компиля-
тор разрешит использовать метод Draw для переменной, только если он
сможет гарантировать, что в классе переменной имеется этот метод. При-
соединение метода Draw к классу TGraphObject обеспечивает такую га-
рантию, даже если метод Draw для класса TGraphObject никогда не вы-
полняется. Естественно, для того чтобы
каждая фигура рисовалась по-
своему, метод Draw должен быть виртуальным.
Порядок выполнения работы.
1. Определить иерархию классов (в соответствии с вариантом).
2. Определить в классе статическую компоненту - указатель на нача-
ло связанного списка объектов и статическую функцию для просмотра
списка.
3. Реализовать классы.
4. Написать демонстрационную программу, в которой создаются
объекты различных классов и помещаются в список, после чего список
просматривается.
5. Сделать соответствующие методы не
виртуальными и посмотреть,
что будет.
6. Реализовать вариант, когда объект добавляется в список при соз-
дании, т.е. в конструкторе (смотри пункт 6 следующего раздела).
Методические указания.
1. Для определения иерархии классов связать отношением наследо-
вания классы, приведенные в приложении (для заданного варианта). Из
перечисленных классов выбрать один, который будет стоять во главе ие-
рархии. Это абстрактный класс.
2. Определить в классах все необходимые конструкторы и деструк-
тор.
                                   22

TGraphObject просто нет достаточной информации для рисования чего бы
то ни было. Тем не менее присутствие метода Draw позволяет связать
функциональность (рисование) только один раз с классом TGraphObject, а
не вводить три независимые концепции для подклассов TTriangle, TCircle,
TSquare.
      Имеется и вторая, более актуальная причина использования абст-
рактного метода. В объектно-ориентированных языках программирования
со статическими типами данных, к которым относится и С++, программист
может вызвать метод класса, только если компилятор может определить,
что класс действительно имеет такой метод. Предположим, что програм-
мист хочет определить полиморфную переменную типа TGraphObject, ко-
торая будет в различные моменты времени содержать фигуры различного
типа. Это допустимо для полиморфных объектов. Тем не менее компиля-
тор разрешит использовать метод Draw для переменной, только если он
сможет гарантировать, что в классе переменной имеется этот метод. При-
соединение метода Draw к классу TGraphObject обеспечивает такую га-
рантию, даже если метод Draw для класса TGraphObject никогда не вы-
полняется. Естественно, для того чтобы каждая фигура рисовалась по-
своему, метод Draw должен быть виртуальным.

      Порядок выполнения работы.
      1. Определить иерархию классов (в соответствии с вариантом).
      2. Определить в классе статическую компоненту - указатель на нача-
ло связанного списка объектов и статическую функцию для просмотра
списка.
      3. Реализовать классы.
      4. Написать демонстрационную программу, в которой создаются
объекты различных классов и помещаются в список, после чего список
просматривается.
      5. Сделать соответствующие методы не виртуальными и посмотреть,
что будет.
      6. Реализовать вариант, когда объект добавляется в список при соз-
дании, т.е. в конструкторе (смотри пункт 6 следующего раздела).

     Методические указания.
     1. Для определения иерархии классов связать отношением наследо-
вания классы, приведенные в приложении (для заданного варианта). Из
перечисленных классов выбрать один, который будет стоять во главе ие-
рархии. Это абстрактный класс.
     2. Определить в классах все необходимые конструкторы и деструк-
тор.