ПК 2102. ПК(2102). П. Г. Колинько пользовательские контейнеры
![]()
|
1.2. Практикум по гл. 1В табл. 1.1 собрана коллекция фигур, которыми можно дополнить рассмотренную прикладную программу для размещения на рис. 1.1. Таблица 1.1Коллекция дополнительных фигур
Продолжение табл. 1.1
Продолжение табл. 1.1
Окончание табл. 1.1
Для некоторых фигур возможны повороты на 90o вправо или влево или отражение относительно горизонтальной и/или вертикальной оси симметрии, причем для части из них имеются обе возможности. Некоторые фигуры строятся как составные из более простых. Эти идеи можно отобразить показанной на рис. 1.2 иерархией классов. ![]() ![]() Рис. 1.2. Фрагмент возможной иерархии классов фигур Таблица 1.2Индивидуальные задания к гл. 1
Задание: доработать модуль shape.cpp, добавив в коллекцию еще одну фигуру, номер которой указан в табл. 1.2 в строке с вашим вариантом. Для этой фигуры нужно определить подходящее место в иерархии классов и написать недостающие функции-члены. Конструктор копии и другие генерируемые компилятором функции-члены, использование которых не предполагается, рекомендуется сделать недоступными. Грамотная иерархия наследования позволит сократить количество необходимых функций-членов. Переопределять память, имеющуюся в базовом классе, вообще не следует, но можно изменить ее смысл, если наследуемые функции-члены это позволяют. Разработанной фигурой нужно дополнить картинку в указанных в варианте позициях (рис. 1.3). Позиция 1 обозначает галстук или воротник, 2 и 3 — бакенбарды, 4 и 5 — уши, 6 — кокарду, 7 и 8 — рога, 9 — нос, 10 и 11 — глаза, 12 — эмблему на шляпе, 13 и 15 — перья, 14 — шишак. Возможно, некоторые из фигур нужно будет повернуть или отразить. Так, в позициях 2, 4, 7, 10 и 13 фигура должна быть повернута (или отражена) влево; 3, 5, 8, 11 и 15 — вправо; 14 — отражена вверх; 1 и 9 — вниз. ![]() ![]() Рис. 1.3. Позиции для присоединения дополнительных фигур Для фигур, назначенных в позиции 6, 9, 10, 11 и 12, допускается замена отношения между классами ЯВЛЯЕТСЯ отношением СОДЕРЖИТ (см. комментарии в определении класса myshape). Для примыкания фигур должны использоваться их габаритные точки. Необходимо написать аналоги функции up (поместить p над q), обеспечивающие примыкание очередной фигуры p с нужной стороны по отношению к уже размещенной q. Это должны быть обычные функции, а не функции-члены класса, чтобы их можно было применять для любых объектов. Категорически запрещается вычислять или подбирать координаты размещения фигуры вручную по готовой картинке и задавать их затем константами в функции move( ). При проектировании класса фигуры, допускающей поворот и/или отражение, рекомендуется отделить информацию, необходимую для рисования фигуры с учетом ее ориентации, и информацию для вычисления положения точек привязки, не зависящих от ориентации. |