如何在C ++中重载一元减运算符?

时间:2010-01-28 14:46:27

标签: c++ operator-overloading

我正在实现向量类,我需要得到一些向量的反面。是否可以使用运算符重载来定义此方法?

这就是我的意思:

Vector2f vector1 = -vector2;

以下是我希望此操作员完成的操作:

Vector2f& oppositeVector(const Vector2f &_vector)
{
 x = -_vector.getX();
 y = -_vector.getY();

 return *this;
}

感谢。

3 个答案:

答案 0 :(得分:114)

是的,但您没有为其提供参数:

class Vector {
   ...
   Vector operator-()  {
     // your code here
   }
};

请注意,您不应该返回* this。一元 - 运算符需要创建一个全新的Vector值,而不是更改它应用的东西,所以你的代码可能想看起来像这样:

class Vector {
   ...
   Vector operator-() const {
      Vector v;
      v.x = -x;
      v.y = -y;
      return v;
   }
};

答案 1 :(得分:26)

这是

Vector2f operator-(const Vector2f& in) {
   return Vector2f(-in.x,-in.y);
}

可以在课堂内或外面。我的示例位于命名空间范围内。

答案 2 :(得分:-2)

正在寻找答案,同时用C ++(基于GMP)设计高精度算术库。与所说的相反,一元“ - ”必须返回新的价值,这段代码对我有用:

bigdecimal& bigdecimal::operator - () {
    mpf_neg(this->x, this->x);//set left mpf_t var to -right
    return *this;
}