#include #include #include #include #include class Figure { public: virtual std::string Name() = 0; virtual double Perimeter() = 0; virtual double Area() = 0; }; class Triangle : public Figure { double a = 0; double b = 0; double c = 0; public: Triangle(double a, double b, double c) { this->a = a; this->b = b; this->c = c; } std::string Name() override { return "TRIANGLE"; } double Perimeter() override { return a + b + c; } double Area() override { double p = Perimeter() / 2; return sqrt(p * (p - a) * (p - b) * (p - c)); } }; class Rect : public Figure { public: double width = 0; double height = 0; Rect(double width, double height) { this->width = width; this->height = height; } std::string Name() override { return "RECT"; } double Perimeter() override { return (width + height) * 2; } double Area() override { return width * height; } }; class Circle : public Figure { public: double radius = 0; explicit Circle(double radius) { this->radius = radius; } std::string Name() override { return "CIRCLE"; } double Perimeter() override { return 2 * 3.14 * radius; } double Area() override { return 3.14 * radius * radius; } }; static std::shared_ptr
CreateFigure(std::istringstream &request1) { auto request = request1.str(); request = request.erase(0, request.find(' ') + 1); int pos = request.find(' '); auto type = request.substr(0, pos); request.erase(0, pos + 1); if (strcmp(type.c_str(), "RECT") == 0) { pos = request.find(' '); int width = std::stoi(request.substr(0, pos)); request.erase(0, pos + 1); int height = std::stoi(request); std::shared_ptr ptr1(new Rect(width, height)); return ptr1; } else if (strcmp(type.c_str(), "CIRCLE") == 0) { int radius = std::stoi(request); std::shared_ptr ptr1(new Circle(radius)); return ptr1; } else if (strcmp(type.c_str(), "TRIANGLE") == 0) { pos = request.find(' '); int a = std::stoi(request.substr(0, pos)); request.erase(0, pos + 1); pos = request.find(' '); int b = std::stoi(request.substr(0, pos)); request.erase(0, pos + 1); int c = std::stoi(request); std::shared_ptr ptr1(new Triangle(a, b, c)); return ptr1; } return nullptr; }