class Figure
{
int c; // цвет
bool visible;
protected:
int x,y; // базовая точка
virtual void draw();
public:
Figure(int c, int x, int y);
~Figure();
void move(int x, int y); // сместить фигуру в точку (x,y)
// видимая фигура гасится, затем рисуется в другом месте
// у невидимой просто меняются поля x,y
void setcolor(int c); // установить цвет фигуры
// видимая фигура рисуется новым цветом
// у невидимой просто меняется поле c
int getcolor() const; // получить цвет
void hide(); // спрятать: нарисовать черный прямоугольник
// по размерам area()
void show(); // показать
bool isvisible() const; // видима?
virtual void area(int &x1,int &y1,int &x2,int &y2) const;
// получить размеры прямоугольной области, содержащей фигуру
};
Определить реализацию методов класса Figure.
Методы area и draw нужно определить как чисто виртуальные.
Как нужно определить деструктор Figure и производных классов,
чтобы видимый объект исчезал с экрана при уничтожении?
Определить производный класс
1. Ромб
Romb(цвет линий, x и y центра, длина, высота)
2. Эллипс
Ellipse(цвет линий, x и y центра, радиус1, радиус2)
3. Прямоугольник (незакрашенный)
Rectangle(цвет линий, x и y угла, длина, высота, угол поворота)
4. Прямоугольный треугольник
Triangle(цвет линий, x и y прямого угла , катет1, катет2, угол поворота)
5. Прямоугольник со скругленными углами
Rectangle(цвет линий, x и y левого нижнего угла, длина, высота, радиус)
6. Сектор круга (незакрашенный)
Sector(цвет линий, x и y цетра круга, радиус, угол1, угол2)
7. Правильный треугольник
Triangle(цвет линий, x и y центра, длина стороны, угол поворота)
8. 3D кирпич (в проекции)
Brick(цвет линий, x и y левого нижнего угла, длина, высота, толщина)
9. Квадрат
Square(цвет линий, x и y центра, длина стороны, угол поворота)
10.Шестиугольник
Hexagon(цвет линий, x и y центра, длина стороны)
11.Стрелка
Arrow(цвет линий, x и y левого нижнего угла, длина, высота)
12. Пятиугольная звезда
Pentagram(цвет линий, x и y центра, радиус, угол поворота)
13.Стрелка
Arrow(цвет линий, x и y левого нижнего угла, длина, высота)
14.Бублик
Boublik(цвет линий, x и y центра, радиус1, радиус2)
радиус1<радиус2
15.3/4 Квадрата
Square34(цвет линий, x и y центра, длина стороны, N вырезанного сектора 1..4)
16. Шестиугольная звезда
Star(цвет линий, x и y центра, радиус, угол поворота)
17.Цилиндр (в проекции)
Cylinder(цвет линий, x и y центра, радиус1, радиус2, высота)
18.Крест
Cross(цвет линий, x и y центра, длина, толщина полосок)
19.Пятиугольник
Pentagon(цвет линий, x и y центра, длина стороны)
20.Параллелограмм
Parallelogram(x и y левого нижнего угла, длина, высота, угол наклона)
21.Полукруг
HalfCircle(цвет линий, x и y центра круга, радиус, угол поворота)
22.Радуга (полубублик)
Rainbow(цвет линий, x и y центра, радиус1, радиус2)
23.Равнобедренная трапеция
Trapezium(цвет линий, x и y левого нижнего угла, основание1, основание2, высота)
24.Капля (состоит из полукруга и равнобедренного тругольника)
Drop(цвет линий, x и y центра, высота треугольника, радиус, угол поворота)
25.Восьмиугольник
Octagon(цвет линий, x и y центра, длина стороны)
26.Прямоугольник с одним загнутым углом (лист бумаги)
Rectangle(цвет линий, x и y левого нижнего угла, длина, высота, величина сгиба)
Определить дополнительный метод в производном классе для изменения размеров: void setsizes(длина, высота);
или void setsizes(длина, высота, радиус);
или void setsizes(радиус, угол1, угол2);
и т.д., т.е. изменение значений, указываемых в аргументах конструтора,
начиная с четвертого.
От написанного класса произвести новый дочерний класс - закрашенная фигура.
Например, закрашенный ромб (FillRomb ← Romb ← Figure).
Добавить к параметрам конструктора цвет заполнения.
Определить дополнительный метод для изменения цвета заполнения: void setfillcolor(int c);
II. Реализовать main c тестами
Динамически создать две фигуры 2 разных классов, адреса объектов сохранить в переменных типа Figure *. Вызвать все методы для каждой из фигур, перед вызовом методов, определенных в производных классах, выполнить преобразование к указателю на производный класс с помощью dynamic_cast с проверкой:
if(Romb *r=dynamic_cast<Romb*>(o1)) r->setsizes(100,50);
III. Написать отчет
Постановка задачи
Описание интерфейса классов
(class {} и комментарии ко всем полям,
методам и функциям)
Описание тестов для проверки классов
(main с комментариями, какие действия выполнялись, полученные результаты)
)
Листинг реализации классов
(реализация методов и функций)