/* * Для расчет площади фигур квадрат/ромб/прямоугольник/параллелограмм * справедлива будет одна общая формула - произведение основания на высоту */ #ifndef EXERCISE_1_HPP_ #define EXERCISE_1_HPP_ #include #define PI 3.14159265358979323846 float getRadian(float degree) { return PI / 180 * degree; } class Figure { public: virtual float area() = 0; virtual ~Figure() { }; }; class Parallelogram : public Figure { private: float m_side_a; float m_side_b; float m_height; protected: float getSideA() const { return m_side_a; } float getSideB() const { return m_side_b; } public: Parallelogram(float side_a, float height, float side_b = 0.0) : m_side_a(side_a), m_side_b(side_b), m_height(height) { } float area() { float area = m_side_a * m_height; std::cout << "Площадь параллелограмма равна " << area << std::endl; return area; } }; class Circle : public Figure { private: float m_radius; public: Circle(float radius) : m_radius(radius) { } float area() { float area = PI * pow(m_radius, 2); std::cout << "Площадь круга равна " << area << std::endl; return area; } }; class Rectangle : public Parallelogram { public: Rectangle(float side_a, float side_b) : Parallelogram(side_a, side_b, side_b) { } float area() { float area = getSideA() * getSideB(); std::cout << "Площадь прямоугольника равна " << area << std::endl; return area; } }; class Square : public Parallelogram { Square(float side_a, float side_b) : Parallelogram(side_a, side_b, side_b) { } float area() { float area = getSideA() * getSideB(); std::cout << "Площадь квадрата равна " << area << std::endl; return area; } }; class Rhombus : public Parallelogram { Rhombus(float side_a, float side_b) : Parallelogram(side_a, side_b, side_b) { } float area() { float area = getSideA() * getSideB(); std::cout << "Площадь ромба равна " << area << std::endl; return area; } }; #endif