Advertisement
avr39ripe

PV913PolygonClassDemo

Jul 27th, 2020
141
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <math.h>
  5.  
  6. class Polygon
  7. {
  8. protected:
  9.     std::vector<float> sides;
  10.    
  11. public:
  12.     Polygon& addSide(float size) { sides.push_back(size); return *this; };
  13.     Polygon& setSide(int sideId, float size)
  14.     {
  15.         sides[sideId] = size; return *this;
  16.     };
  17.     float getSide(int sideId)const { return sides[sideId]; };
  18.     virtual float perimeter()const
  19.     {
  20.         float per{ 0 };
  21.         for (const auto & side : sides)
  22.         {
  23.             per += side;
  24.         }
  25.         return per;
  26.     };
  27.     virtual float area()const { return 0; };
  28.  
  29.     const Polygon& sidesInfo()const
  30.     {
  31.         for (int i{ 0 }; i < sides.size(); ++i)
  32.         {
  33.             std::cout << " Side " << char('A' + i) << " is " << sides[i] << " long\n";
  34.         }
  35.         return *this;
  36.     }
  37.  
  38.     std::string name()const
  39.     {
  40.         std::string nm{ typeid(*this).name() }; //"class Polygon"
  41.         return nm.substr(5);
  42.     }
  43.  
  44.     const Polygon& info()const
  45.     {
  46.         std::cout << name() << ":\n"
  47.             << " Perimeter: " << perimeter()
  48.             << " Area: " << area() << '\n';
  49.         sidesInfo();
  50.         std::cout << '\n';
  51.  
  52.         return *this;
  53.     }
  54.  
  55. };
  56.  
  57. class Rectangle : public Polygon
  58. {
  59. public:
  60.     Rectangle(float sideA, float sideB) { addSide(sideA); addSide(sideB); };
  61.     virtual float perimeter()const override{ return Polygon::perimeter() * 2; };
  62.     virtual float area()const  override { return getSide(0) * getSide(1); }
  63. };
  64.  
  65. class Square : public Rectangle
  66. {
  67. public:
  68.     Square(float sideA) : Rectangle{ sideA, sideA } {};
  69. };
  70.  
  71. class Triangle : public Polygon
  72. {
  73. public:
  74.     Triangle(float sideA, float sideB, float sideC)
  75.     {
  76.         addSide(sideA).addSide(sideB).addSide(sideC);
  77.     };
  78.     virtual float area()const override
  79.     {
  80.         const float p{ perimeter() / 2 };
  81.         return sqrt(p * (p - getSide(0)) * (p - getSide(1)) * (p - getSide(2)));
  82.     }
  83. };
  84.  
  85.  
  86. int main()
  87. {
  88.     Polygon* polygons[]{ new Rectangle{4,5}, new Square{6}, new Triangle{3,4,5} };
  89.  
  90.     for (const auto& polygon : polygons)
  91.     {
  92.         polygon->info();
  93.  
  94.         delete polygon;
  95.     };
  96.  
  97.     return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement