#include #include #include #include #include using std::string; using std::make_shared; using std::shared_ptr; using std::stoi; using std::istringstream; class Figure { public: virtual string Name() const { return "FIGURE"; } virtual float Perimeter() const { return 0; } virtual float Area() const { return 0; } }; class Rect : public Figure { public: Rect(int w, int h): w(w), h(h) {} string Name() const override { return "RECT"; } float Perimeter() const override { return 2*(w + h); } float Area() const override { return w * h; } private: int w, h; }; class Circle : public Figure { public: explicit Circle(int r): r(r) {} string Name() const override { return "CIRCLE"; } float Perimeter() const override { return 3.14 * 2 * r; } float Area() const override { return 3.14 * pow(r, 2); } private: int r; }; class Triangle : public Figure { public: Triangle(int a, int b, int c): a(a), b(b), c(c) {} string Name() const override { return "TRIANGLE"; } float Perimeter() const override { return a + b + c; } float Area() const override { float p = static_cast(this->Perimeter()) / 2; int area = sqrt(p*(p-a)*(p-b)*(p-c)); return area; } private: int a, b, c; }; shared_ptr
CreateFigure(istringstream& is) { string figure; is >> figure; if (figure == "RECT") { string w, h; is >> w >> h; return make_shared(stoi(w), stoi(h)); } if (figure == "TRIANGLE") { string a, b, c; is >> a >> b >> c; return make_shared(stoi(a), stoi(b), stoi(c)); } string r; is >> r; return make_shared(stoi(r)); }