代码之家  ›  专栏  ›  技术社区  ›  Ilya Suzdalnitski

如何在C++中超载一元减算子?

  •  63
  • Ilya Suzdalnitski  · 技术社区  · 15 年前

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

    我的意思是:

    Vector2f vector1 = -vector2;
    

    我希望这个操作员完成以下任务:

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

    谢谢。

    3 回复  |  直到 8 年前
        1
  •  110
  •   anon    15 年前

    是的,但您不提供参数:

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

    请注意,您不应该返回*这个。一元运算符需要创建一个全新的向量值,而不是更改它应用到的对象,因此您的代码可能需要如下所示:

    class Vector {
       ...
       Vector operator-() const {
          Vector v;
          v.x = -x;
          v.y = -y;
          return v;
       }
    };
    
        2
  •  26
  •   kennytm    15 年前

    它是

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

    可以在类内,也可以在类外。我的示例在命名空间范围内。

        3
  •  -2
  •   Robert Hanigan    8 年前

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

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