Triangle.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #pragma once
  2. #include "geometry.h"
  3. class Triangle_exception{};
  4. class Triangle :
  5. public Geometry_figure
  6. {
  7. private:
  8. double sides[3];
  9. void calc_sides();
  10. public:
  11. template <class value_class> Triangle(value_class A, value_class B, value_class C);
  12. template <class value_class> Triangle(value_class x1, value_class y1, value_class x2, value_class y2, value_class x3, value_class y3 );
  13. Triangle();
  14. template <> Triangle(Point A, Point B, Point C);
  15. double calc_area();
  16. double calc_perimeter();
  17. void name();
  18. };
  19. template<class value_class>
  20. inline Triangle::Triangle(value_class A, value_class B, value_class C)
  21. {
  22. is_incorrect = (A <= 0) || (B <= 0) || (C <= 0);
  23. sides[0] = (double)(A);
  24. sides[1] = (double)(B);
  25. sides[2] = (double)(C);
  26. is_incorrect = is_incorrect || (sides[0] > sides[1] + sides[2]) || (sides[2] > sides[1] + sides[0]) || (sides[1] > sides[2] + sides[0]);
  27. if (is_incorrect)
  28. throw Triangle_exception();
  29. }
  30. template<class value_class>
  31. inline Triangle::Triangle(value_class x1, value_class y1, value_class x2, value_class y2, value_class x3, value_class y3)
  32. {
  33. dots.push_back(Point(x1,y1));
  34. dots.push_back(Point(x2, y2));
  35. dots.push_back(Point(x3, y3));
  36. calc_sides();
  37. }
  38. template <>
  39. Triangle::Triangle(Point A, Point B, Point C)
  40. {
  41. dots.push_back(A);
  42. dots.push_back(B);
  43. dots.push_back(C);
  44. calc_sides();
  45. }