Подтвердить что ты не робот

Как перегрузить унарный минус-оператор в С++?

Я реализую векторный класс, и мне нужно получить противоположность некоторого вектора. Можно ли определить этот метод с помощью перегрузки оператора?

Вот что я имею в виду:

Vector2f vector1 = -vector2;

Здесь я хочу, чтобы этот оператор выполнил:

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

 return *this;
}

Спасибо.

4b9b3361

Ответ 1

Да, но вы не предоставляете его с параметром:

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

Обратите внимание, что вы не должны возвращать * это. Унарный оператор должен создать совершенно новое значение Vector, а не изменять то, к чему оно применяется, поэтому ваш код может выглядеть примерно так:

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

Ответ 2

Это

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

Может быть внутри класса или снаружи. Мой образец находится в области пространства имен.

Ответ 3

Был просто нужен ответ для этого, при разработке высокоточной арифметической библиотеки в С++ (на основе GMP). Вопреки сказанному, этот унарный "-" должен вернуть новое значение, этот код работает для меня:

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