Open alexey-malov opened 7 years ago
class CRectangle : public ISolidShape
{
public:
CRectangle(CPoint const& leftTop, double width, double height, std::string const& outlineColor, std::string const& fillColor);
~CRectangle() = default;
double GetArea() const override;
double GetPerimeter() const override;
std::string ToString() const override;
std::string GetOutlineColor() const override;
std::string GetFillColor() const override;
CPoint const& GetLeftTop() const;
CPoint const& GetRightBottom() const;
double GetWidth() const;
double GetHeight() const;
private:
CPoint m_leftTop;
CPoint m_rightBottom;
double m_width;
double m_height;
std::string m_outlineColor;
std::string m_fillColor;
};
shared_ptr<IShape> GetMaxAreaShape(vector<shared_ptr<IShape>> &shapes)
{
return *min_element(shapes.begin(), shapes.end(), [&]
(shared_ptr<IShape> const& shape1, shared_ptr<IShape> const& shape2)
{
return shape1->GetArea() > shape2->GetArea();
});
}
shared_ptr<IShape> GetMinPerimeterShape(vector<shared_ptr<IShape>> &shapes)
{
return *min_element(shapes.begin(), shapes.end(), [&]
(shared_ptr<IShape> const& shape1, shared_ptr<IShape> const& shape2)
{
return shape1->GetPerimeter() < shape2->GetPerimeter();
});
}
[x] привести отступы в порядок, чтобы было видно вложенность
[x] функции должны принимать вектор по константной ссылке
[x] UB при пустом векторе
void PrintShapes(vector<shared_ptr<IShape>> &shapes)
{
for (auto shape : shapes)
{
cout << shape->ToString() << "\n";
}
cout << "Shape with maximum area: \n"
<< GetMaxAreaShape(shapes)->ToString() << "\n";
cout << "Shape with minimum perimeter: \n"
<< GetMinPerimeterShape(shapes)->ToString() << "\n";
}
[x] Функции Add* содержат дублирующийся код. Лучше сделать функции вида Create, а добавление в коллекцию реализовать в одном месте
[ ] Пусть вы перегрузили оператор >> для shared_ptr. Но странно, что он просто тупо считывает аргументы без самой строки с типом фигуры. Отдельно без функции, которая его вызывает, он бесполезен.
virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
float GetArea() const;
float GetPerimeter() const;
CShapeController() = default;
~CShapeController() = default;
void handleEvents(CCanvas &canvas);
CSolidShape(std::string shapeType, std::string outlineColor, std::string fillColor);
ISolidShape::ISolidShape(std::string shapeType, std::string outlineColor)
: CShape(shapeType, outlineColor)
{
}
- [ ] наследовать интерфейс от конкретного класса - тяжкое преступление, измените архитектуру(избегайте ромбовидного наследования)
```c++
class ISolidShape : public CShape
пока что остановлюсь, k = 0.65