#pragma once #include "geometry.h" class Triangle_exception{}; class Triangle : public Geometry_figure { private: double sides[3]; void calc_sides(); public: template Triangle(value_class A, value_class B, value_class C); template <> Triangle(Point A, Point B, Point C); template Triangle(value_class x1, value_class y1, value_class x2, value_class y2, value_class x3, value_class y3 ); Triangle(); double calc_area(); double calc_perimeter(); void name(); }; template inline Triangle::Triangle(value_class A, value_class B, value_class C) { is_incorrect = (A <= 0) || (B <= 0) || (C <= 0); sides[0] = (double)(A); sides[1] = (double)(B); sides[2] = (double)(C); is_incorrect = is_incorrect || (sides[0] > sides[1] + sides[2]) || (sides[2] > sides[1] + sides[0]) || (sides[1] > sides[2] + sides[0]); if (is_incorrect) throw Triangle_exception(); } template inline Triangle::Triangle(value_class x1, value_class y1, value_class x2, value_class y2, value_class x3, value_class y3) { dots.push_back(Point(x1,y1)); dots.push_back(Point(x2, y2)); dots.push_back(Point(x3, y3)); calc_sides(); } template <> inline Triangle::Triangle(Point A, Point B, Point C) { dots.push_back(A); dots.push_back(B); dots.push_back(C); calc_sides(); }