// // Created by Marcus Vinicius de Carvalho // #include #include #include using namespace std; enum KindOfPolygon {POLY_PLAIN, POLY_RECT, POLY_TRIANG}; inline string StringKindofPolygon[] = {"POLY_PLAIN", "POLY_RECT", "POLY_TRIANG"}; class Polygon { protected: string name; float width; float height; KindOfPolygon polytype; public: Polygon(string name, float width, float height) : name(std::move(name)), width(width), height(height) { polytype = POLY_PLAIN; } KindOfPolygon getPolytype() { return polytype; } void setPolytype(KindOfPolygon value) { polytype = value; } string getName() { return name; } virtual float calArea() = 0; void printWidthHeight() const { cout << "Width: " << width << "; Height: " << height << endl; } }; class Rectangle : public Polygon { public: Rectangle(string name, float width, float height) : Polygon(std::move(name), width, height) { polytype = POLY_RECT; } float calArea() override { return width * height; } }; class Triangle : public Polygon { public: Triangle(string name, float width, float height) : Polygon(std::move(name), width, height) { polytype = POLY_TRIANG; } float calArea() override { return width * height * 0.5f; } }; class TestPolygon { public: static void printArea(Polygon& poly) { float area = poly.calArea(); cout << "The area of the " << StringKindofPolygon[poly.getPolytype()] << " is " << area << endl; } }; int main() { Rectangle rectangle1("Rectangle1", 3.0f, 4.0f); rectangle1.printWidthHeight(); TestPolygon::printArea(rectangle1); Triangle triangle1("Triangle1", 3.0f, 4.0f); triangle1.printWidthHeight(); TestPolygon::printArea(triangle1); }