Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <math.h>
- class Polygon
- {
- protected:
- std::vector<float> sides;
- public:
- Polygon& addSide(float size) { sides.push_back(size); return *this; };
- Polygon& setSide(int sideId, float size)
- {
- sides[sideId] = size; return *this;
- };
- float getSide(int sideId)const { return sides[sideId]; };
- virtual float perimeter()const
- {
- float per{ 0 };
- for (const auto & side : sides)
- {
- per += side;
- }
- return per;
- };
- virtual float area()const { return 0; };
- const Polygon& sidesInfo()const
- {
- for (int i{ 0 }; i < sides.size(); ++i)
- {
- std::cout << " Side " << char('A' + i) << " is " << sides[i] << " long\n";
- }
- return *this;
- }
- std::string name()const
- {
- std::string nm{ typeid(*this).name() }; //"class Polygon"
- return nm.substr(5);
- }
- const Polygon& info()const
- {
- std::cout << name() << ":\n"
- << " Perimeter: " << perimeter()
- << " Area: " << area() << '\n';
- sidesInfo();
- std::cout << '\n';
- return *this;
- }
- };
- class Rectangle : public Polygon
- {
- public:
- Rectangle(float sideA, float sideB) { addSide(sideA); addSide(sideB); };
- virtual float perimeter()const override{ return Polygon::perimeter() * 2; };
- virtual float area()const override { return getSide(0) * getSide(1); }
- };
- class Square : public Rectangle
- {
- public:
- Square(float sideA) : Rectangle{ sideA, sideA } {};
- };
- class Triangle : public Polygon
- {
- public:
- Triangle(float sideA, float sideB, float sideC)
- {
- addSide(sideA).addSide(sideB).addSide(sideC);
- };
- virtual float area()const override
- {
- const float p{ perimeter() / 2 };
- return sqrt(p * (p - getSide(0)) * (p - getSide(1)) * (p - getSide(2)));
- }
- };
- int main()
- {
- Polygon* polygons[]{ new Rectangle{4,5}, new Square{6}, new Triangle{3,4,5} };
- for (const auto& polygon : polygons)
- {
- polygon->info();
- delete polygon;
- };
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement