Добавление функциональности в класс может быть выполнено путем добавления метода или путем определения функции, которая принимает объект в качестве первого параметра. Большинство программистов, которые, как я знаю, будут выбирать решение для добавления метода экземпляра.
Однако иногда я предпочитаю создавать отдельную функцию. Например, в примере код ниже Area
и Diagonal
определяются как свободные функции вместо методов. Я считаю, что это лучше, потому что я считаю, что эти функции обеспечивают улучшения, а не основные функции.
Является ли это хорошей/плохой практикой? Если ответ "это зависит", то каковы правила для выбора между добавлением метода или определением отдельной функции?
class Rect
{
public:
Rect(int x, int y, int w, int h) :
mX(x), mY(y), mWidth(w), mHeight(h)
{
}
int x() const { return mX; }
int y() const { return mY; }
int width() const { return mWidth; }
int height() const { return mHeight; }
private:
int mX, mY, mWidth, mHeight;
};
int Area(const Rect & inRect)
{
return inRect.width() * inRect.height();
}
float Diagonal(const Rect & inRect)
{
return std::sqrt(std::pow(static_cast<float>(inRect.width()), 2) + std::pow(static_cast<float>(inRect.height()), 2));
}