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 side) { sides.push_back(side); return *this; }
- Polygon& setSide(int sideId, float side)
- {
- sides[sideId] = side;
- 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 = 0;
- const Polygon& sidesInfo() const
- {
- for (int i{ 0 }, maxSides{ (int)sides.size() }; i < maxSides; ++i)
- {
- std::cout << " Side " << char('A' + i) << " is " << sides[i] << " long\n";
- }
- return *this;
- }
- std::string name() const
- {
- std::string nm{ typeid(*this).name() };
- return nm.substr(5);
- }
- const Polygon& info()
- {
- 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} };
- Rectangle rectangle{ 4,5 };
- Square square{ 6 };
- Triangle triangle{ 3,4,5 };
- Polygon* polygons[]{ &rectangle, &square, &triangle};
- for (const auto& polygon : polygons)
- {
- polygon->info();
- //delete polygon;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement