gpt4 book ai didi

c++ - 在实例方法和自由函数之间进行选择?

转载 作者:IT老高 更新时间:2023-10-28 22:37:40 26 4
gpt4 key购买 nike

可以通过添加方法或定义将对象作为其第一个参数的函数来向类添加功能。我认识的大多数程序员都会选择添加实例方法的解决方案。

但是,我有时更喜欢创建一个单独的函数。例如,在下面的示例代码中,AreaDiagonal 被定义为自由函数而不是方法。我觉得这种方式更好,因为我认为这些功能提供了增强功能而不是核心功能。

这被认为是一种好/坏的做法吗?如果答案是“视情况而定”,那么在添加方法还是定义单独的函数之间做出决定的规则是什么?

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));
}

最佳答案

GoTW #84关于 std::string 探讨了这个问题。他倾向于相反的想法:大多数函数应该是全局的,除非它们真的需要成为成员。

我想说大多数现代 C++ 都倾向于相同的想法。例如,如果你看一下 Boost,就会发现很多都是用免费函数完成的。

关于c++ - 在实例方法和自由函数之间进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2587235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com