geekbrains_oop_cpp/lesson_3/exercise_1.hpp

121 lines
2.1 KiB
C++
Raw Normal View History

2021-06-24 13:43:37 +00:00
/*
* Для расчет площади фигур квадрат/ромб/прямоугольник/параллелограмм
* справедлива будет одна общая формула - произведение основания на высоту
*/
#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;
2021-06-24 21:30:49 +00:00
virtual ~Figure() { };
2021-06-24 13:43:37 +00:00
};
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
{
2021-06-24 21:30:49 +00:00
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;
2021-06-24 13:43:37 +00:00
2021-06-24 21:30:49 +00:00
return area;
}
2021-06-24 13:43:37 +00:00
};
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
{
2021-06-25 12:24:13 +00:00
public:
Square(float side_a)
: Parallelogram(side_a, side_a, side_a) { }
2021-06-24 13:43:37 +00:00
float area()
{
float area = getSideA() * getSideB();
std::cout << "Площадь квадрата равна " << area << std::endl;
return area;
}
};
class Rhombus : public Parallelogram
{
2021-06-25 12:24:13 +00:00
public:
2021-06-24 13:43:37 +00:00
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