Как перегрузить унарный минус-оператор в С++?
Я реализую векторный класс, и мне нужно получить противоположность некоторого вектора. Можно ли определить этот метод с помощью перегрузки оператора?
Вот что я имею в виду:
Vector2f vector1 = -vector2;
Здесь я хочу, чтобы этот оператор выполнил:
Vector2f& oppositeVector(const Vector2f &_vector)
{
x = -_vector.getX();
y = -_vector.getY();
return *this;
}
Спасибо.
Ответы
Ответ 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;
}