19. Зачем делать функции-члены чисто виртуальными?
20. Что такое замещение?
21. Чем наследование интерфейса отличается от наследования реализации?
22. Что такое объектно-ориентированное программирование?
Термины
Упражнения
1. Определите два класса, Smiley
Frowny
, производные от класса Circle
и рисующие два глаза и рот. Затем создайте классы, производные от классов Smiley
и Frowny
, добавляющие к каждому из них свою шляпу.2. Попытайтесь скопировать объект класса Shape
3. Определите абстрактный класс и попытайтесь определить объект его типа. Что произошло?
4. Определите класс Immobile_Circle
Circle
, объекты которого не способны перемещаться.5. Определите класс Striped_rectangle
6. Определите класс Striped_circle
Striped_rectangle
.7. Определите класс Striped_closed_polyline
Striped_rectangle
(для этого придется потрудиться).8. Определите класс Octagon
Shape
).9. Определите класс Group
Shape
с удобными операциями над членами класса Group
. Подсказка: Vector_ref
. Используя класс Group
, определите класс, рисующий шахматную доску, по которой шашки могут перемещаться под управлением программы.10. Определите класс Pseudo_window
Window
. Постарайтесь не прилагать героических усилий. Он должен рисовать закругленные углы, метки и управляющие пиктограммы. Возможно, вы сможете добавить какое-нибудь фиктивное содержание, например изображение. На самом деле с этим изображением ничего не надо делать. Допускается (и даже рекомендуется), чтобы оно появилось в объекте класса Simple_window
.11. Определите класс Binary_tree
Shape
. Введите параметр, задающий количество уровней ( levels==0
означает, что в дереве нет ни одного узла, levels==1
означает, что в дереве есть один узел, levels==2
означает, что дерево состоит из вершины и двух узлов, levels==3
означает, что дерево состоит из вершины и двух дочерних узлов, которые в свою очередь имеют по два дочерних узла, и т.д.). Пусть узел изображается маленьким кружочком. Соедините узлы линиями (как это принято). P.S. В компьютерных науках деревья изображаются растущими вниз от вершины (забавно, но нелогично, что ее часто называют корнем).12. Модифицируйте класс Binary_tree
Binary_tree
новый класс, в котором эта виртуальная функция замещается так, что узлы изображаются иначе (например, в виде треугольников).13. Модифицируйте класс Binary_tree
14. Добавьте в класс Binary_tree
Binary_tree
. Выберите способ идентификации узла; например, для перехода налево, направо, направо, налево и направо вниз по бинарному дереву можете использовать строку "lrrlr
" (корневой узел может соответствовать как переходу влево, так и вправо).15. Большинство иерархий классов не связано с графикой. Определите класс Iterator
next()
, возвращающую указатель типа double*
(см. главу 17). Теперь выведите из класса Iterator
классы Vector_iterator
и List_iterator
так, чтобы функция next()
для класса Vector_iterator
возвращала указатель на следующий элемент вектора типа vector
, а для класса List_iterator
делала то же самое для списка типа list
. Инициализируйте объект класса Vector_iterator
вектором vector
и сначала вызовите функцию next()
, возвращающую указатель на первый элемент, если он существует. Если такого элемента нет, верните нуль. Проверьте этот класс с помощью функции void print(Iterator&)
, выводящей на печать элементы вектора типа vector
и списка типа list
.