Advertisement
Guest User

Figures.h

a guest
Feb 17th, 2020
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.23 KB | None | 0 0
  1. #pragma once
  2.  
  3.  
  4. #define PI 3.14159265358979323846
  5.  
  6. using namespace std;
  7.  
  8. class Shape {
  9. public:
  10.  
  11.     virtual double ShapePerimeter() = 0;
  12.     virtual double ShapeSquare() = 0;
  13.  
  14.     virtual ~Shape() {};
  15.  
  16. };
  17.  
  18. //-------------------------------------------//
  19.  
  20. class Polygon:public Shape{};
  21.  
  22. //-------------------------------------------//
  23.  
  24. class Square :public Polygon {
  25.     double diagonal;
  26. public:
  27.     Square() :diagonal(0) {}
  28.     Square(double s_diagonal) :diagonal(s_diagonal) {}
  29.     Square(const Square& s) :diagonal(s.diagonal) {}
  30.  
  31.     double GetDiagonal() const {
  32.         return diagonal;
  33.     }
  34.    
  35.  
  36.     double ShapePerimeter() {
  37.         return 4 * diagonal;
  38.     }
  39.  
  40.     double ShapeSquare() {
  41.         return pow(diagonal,2);
  42.     }
  43.  
  44.     friend ostream &operator<<(ostream& out, const Square& s) {
  45.         out << s.diagonal << "cm" << endl;
  46.         return out;
  47.     }
  48.  
  49.     friend istream &operator>>(istream& in, Square& s) {
  50.         in >> s.diagonal;
  51.         return in;
  52.     }
  53. };
  54.  
  55. //-------------------------------------------//
  56.  
  57. class Rectangle :public Polygon {
  58.     double side1;
  59.     double side2;
  60.  
  61. public:
  62.     Rectangle() :side1(0),side2(0) {}
  63.     Rectangle( double r_diagonal):side1(r_diagonal),side2(r_diagonal){}
  64.     Rectangle(double r_side1 , double r_side2) :side1(r_side1),side2(r_side2) {}
  65.     Rectangle(const Rectangle& r) :side1(r.side1), side2(r.side2) {}
  66.  
  67.     double ShapePerimeter() {
  68.         return 2*(side1+side2);
  69.     }
  70.  
  71.     double ShapeSquare()  {
  72.         return side1*side2;
  73.     }
  74.  
  75.     friend ostream& operator<<(ostream& out, const Rectangle& r) {
  76.         out << r.side1<<"cm" << " x " << r.side2 << "cm" << endl;
  77.         return out;
  78.     }
  79.  
  80.     friend istream& operator>>(istream& in, Rectangle& r) {
  81.         in >> r.side1;
  82.         in >> r.side2;
  83.         return in;
  84.     }
  85. };
  86.  
  87. //-------------------------------------------//
  88.  
  89. class Triangle : public Polygon {
  90.     double side1;
  91.     double side2;
  92.     double side3;
  93.  
  94. public:
  95.     Triangle():side1(0),side2(0),side3(0){}
  96.     Triangle(double t_height):side1(t_height),side2(t_height),side3(t_height){}
  97.     Triangle(double t_side1 ,double t_side2, double t_side3):side1(t_side1),side2(t_side2),side3(t_side3){}
  98.     Triangle(const Triangle &t):side1(t.side1), side2(t.side2),side3(t.side3){}
  99.  
  100.     double ShapePerimeter(){
  101.         return side1 + side2 + side3;
  102.     }
  103.  
  104.     double ShapeSquare() {
  105.         return sqrt(Triangle::ShapePerimeter() * (Triangle::ShapePerimeter() - side1) * (Triangle::ShapePerimeter() - side2)
  106.                  * (Triangle::ShapePerimeter() - side3));
  107.     }
  108.  
  109.     friend ostream& operator<<(ostream& out, const Triangle& t) {
  110.         out << t.side1 << "cm" << " x " << t.side2 << "cm" <<" x "<<t.side3<<"cm"<<endl;
  111.         return out;
  112.     }
  113.  
  114.     friend istream& operator>>(istream& in, Triangle& t) {
  115.         in >> t.side1;
  116.         in >> t.side2;
  117.         in >> t.side3;
  118.         return in;
  119.     }
  120. };
  121.  
  122. //-------------------------------------------//
  123.  
  124. class Circle : public Shape {
  125.     double radius;
  126.  
  127. public:
  128.     Circle():radius(0){}
  129.     Circle(double c_radius):radius(c_radius){}
  130.     Circle(const Circle& c):radius(c.radius){}
  131.  
  132.     double ShapePerimeter()override {
  133.         return 2 * PI * radius;
  134.     }
  135.     double ShapeSquare()override {
  136.         return PI*pow(radius, 2);
  137.     }
  138.  
  139.     friend ostream& operator<<(ostream& out, const Circle& c) {
  140.         out <<"radius-"<<c.radius<< "cm" << endl;
  141.         return out;
  142.     }
  143.     friend istream& operator>>(istream& in, Circle& c) {
  144.         in >> c.radius;
  145.         return in;
  146.     }
  147.  
  148. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement