
#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
