geekbrains_oop_cpp/lesson_3/exercise_1.hpp

119 lines
2.1 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() { };
};
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