geekbrains_oop_cpp/lesson_3/exercise_1.hpp

107 lines
1.9 KiB
C++

/*
* Для расчет площади фигур квадрат/ромб/прямоугольник/параллелограмм
* справедлива будет одна общая формула - произведение основания на высоту
*/
#ifndef EXERCISE_1_HPP_
#define EXERCISE_1_HPP_
#include <math.h>
#define PI 3.14159265358979323846
float getRadian(float degree)
{
return PI / 180 * degree;
}
class Figure
{
public:
virtual float area() = 0;
virtual ~Figure() = 0;
};
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
{
};
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