我正在实施矢量类,我需要得到一些向量的相反。是否可以使用运算符重载定义此方法?如何在C++中重载一元减运算符?
这里就是我的意思是:
Vector2f vector1 = -vector2;
这是我希望这个操作完成的任务:
Vector2f& oppositeVector(const Vector2f &_vector)
{
x = -_vector.getX();
y = -_vector.getY();
return *this;
}
感谢。
我正在实施矢量类,我需要得到一些向量的相反。是否可以使用运算符重载定义此方法?如何在C++中重载一元减运算符?
这里就是我的意思是:
Vector2f vector1 = -vector2;
这是我希望这个操作完成的任务:
Vector2f& oppositeVector(const Vector2f &_vector)
{
x = -_vector.getX();
y = -_vector.getY();
return *this;
}
感谢。
是的,但你不带参数提供它:
class Vector {
...
Vector operator-() {
// your code here
}
};
注意,你不应该回到这个*。一元 - 运营商需要建立一个全新的矢量值,而不是改变它应用到的东西,所以你的代码可能想看看这样的事情:
class Vector {
...
Vector operator-() const {
Vector v;
v.x = -x;
v.y = -y;
return v;
}
};
这是
Vector2f operator-(const Vector2f& in) {
return Vector2f(-in.x,-in.y);
}
可以在类内或外部。我的示例在命名空间范围内。
+1上使用'.getX()'和'.getY()'来捕获您需要返回一个新的Vector2f实例,而不是对当前对象的引用。 – MikeSep 2010-01-28 14:53:05
这是* binary *操作符的实现。 @anon说unary没有参数。 – 2011-01-27 16:12:15
不是,它是一个一元运算符。它使用'Vector2f'作为参数,因为它是在名称空间而不是类范围中定义的。我的回答是正确的。 – 2011-01-27 18:25:41
只是在寻找答案了这一点,而用C++设计高精度算术库(基于GMP)。与之前所说的相反,该一元“ - ”必须返回新值,该代码适用于我:
bigdecimal& bigdecimal::operator -() {
mpf_neg(this->x, this->x);//set left mpf_t var to -right
return *this;
}
此代码将打破奇怪和美妙(令人沮丧)的方式。它可能工作..但你会用它吹你的脚。 – ioquatix 2017-11-09 13:11:12
所以如果我做'y = -x;',我应该期望'x'的价值改变吗? – patatahooligan 2018-02-27 17:58:12
由于性能方面的原因,在后期发布这个问题的C++ 11中,您可能需要一个rval运算符 - 以获得更大的向量。 – 2018-02-28 11:19:12
样式注释:不要用'_'作为变量的前缀。这种风格是为实现(编译器)保留的,你可能会有冲突。另外,读者由于'_'前缀无意识地将变量识别为实现变量。你不需要在函数内部使用'_';没有它,它们将是可读的。 – 2010-01-28 18:48:53
两个下划线被保留用于实现,而不仅仅是一个。 – 2010-07-07 11:56:55
我相信它是_MACRO和__identifiers。 – Puppy 2010-07-07 12:20:46