printЛабораторные работы

printЗадание 3

Тема:Виртуальные методы, наследование

При выполнении работы использовать графическую библиотеку WinBGIm

I. Базовый класс для всех вариантов:
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 и производных классов, чтобы видимый объект исчезал с экрана при уничтожении?
Определить производный класс


Определить дополнительный метод в производном классе для изменения размеров:
    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 с комментариями, какие действия выполнялись, полученные результаты) )
  • Листинг реализации классов (реализация методов и функций)
loading