#ifndef __FIGURES_H
#define __FIGURES_H
#include <vector>
#include <iostream>
//абстрактный базовый класс
class Figure{
protected:
int color; //общие свойства для всех потомков
public:
Figure(int color) :
color(color) //список инициализации полей
{}
//чисто виртуальная функция вычисления площади
virtual double place() const = 0;
//чисто виртуальная функция вычисления периметра
virtual double perimetr() const = 0;
//чисто виртуальная функция для вывода данных о фигуре
virtual void output() const = 0;
//вложенная структура для координат точки
struct Point{
int x;
int y;
Point(int x, int y):
x(x), y(y)
{}
};
};
class Circle: public Figure{
Point center; //координаты центра
int rad; //радиус
public:
Circle(Point center, int rad, int color);
//перегружаем виртуальную функцию
virtual double place() const;
virtual double perimetr() const;
virtual void output() const;
};
class Triangle : public Figure{
Point p1, p2, p3; //координаты вершин
public:
Triangle(Point p1, Point p2, Point p3, int color);
//перегружаем виртуальную функцию
virtual double place() const;
virtual double perimetr() const;
virtual void output() const;
};
class Polygon : public Figure {
std::vector<Figure::Point> vPolygon;//координаты вершин
public:
Polygon(std::vector<Figure::Point> vPolygon, int color);
//перегружаем виртуальную функцию
virtual double place() const;
virtual double perimetr() const;
virtual void output() const;
};
std::ostream & operator << (std::ostream & os, const Figure &f);
#endif