C ++类加法方法

时间:2014-08-15 15:47:19

标签: c++ methods

我有一个主要包含整数的C ++类,我希望停止一个将两个加在一起的方法,我不想重载+运算符。

我相信我有两个选择:

var_result = var1.add(var2);

var_result.add(var1, var2);

其中var_result,var1和var2属于同一类型。

我认为第一个更直观,但第二个不是创建一个可能带来性能优势的实例。我该如何做出这个决定呢?使用我的代码,其他人可以直接看到它。

我意识到我可能正在以#34;意见为基础进行切割。关闭这个问题,但希望这里有一定程度的客观性。

2 个答案:

答案 0 :(得分:3)

使用与add()相同的(首选)语义编写operator+方法:编写一个按值返回新对象的自由方法。

示例:

var_result = add(var1, var2);

var_result2 = add(var1, var2).add(var3, var4);

// etc...

它允许您链接方法,并尊重原始类型可用的常用语义。

注意:

  • 通常,自由函数operator+会使用您为类型定义的类成员operator+=,同时允许var_result += var1

所以你的最终设计应该是这样的:

class X
{
  public:
    X& operator+=(const X& rhs) { ...; return *this; }
};

X add(X lhs, const X& rhs)
{
    return lhs += rhs;
}

或者,如果你不想要operator+=(这是有意义的,至少是为了一致性):

class X
{
  public:
    X& add(const X& rhs) { ...; return *this; }
};

X add(X lhs, const X& rhs)
{
    return lhs.add(rhs);
}

答案 1 :(得分:1)

创建一个新项目,因为任何空间/时间性能成本很小,使用不可变对象有很大的优势。