我在1或2周前学过运算符重载,我想我知道它是如何工作的但是我试图重载运算符+
所以它返回一个新的CCuaternion
正在工作好吧,但是
CCuaternion(float w, float x, float y, float z) {
this->w = w;
this->x = x;
this->y = y;
this->z = z;
} //Ccuaternion constructor at Ccuaternion.h
CCuaternion operator + (CCuaternion &q2); // at CCuaternion.h
CCuaternion CCuaternion::operator + (CCuaternion &q2){ // at Ccuaternion.cpp
CCuaternion suma;
suma.setW(w += q2.getW());
suma.setX(x += q2.getX());
suma.setY(y += q2.getY());
suma.setZ(z += q2.getZ());
return suma; }
在我的main
中,我有一个名为CCuaternion
的对象qsuma
,它接收重载正在返回的CCuaternion
。它看起来像这样:
q1 = CCuaternion(0, 1, 0, 1); // at main.cpp
q2 = CCuaternion(1, 0, 0, 1);
qsuma = (q1+q2);
正如所期望的那样,qsuma
最终会得到值1, 1, 0, 2
。
q2
保持不变,但q1
最终与qsuma
的值相同。
答案 0 :(得分:2)
重载加法运算符的首选方法是这样的:
CCuaternion & CCuaternion::operator += (CCuaternion const &q2)
{
w += q2.w;
x += q2.x;
y += q2.y;
z += q2.z;
return *this;
}
这是一个非会员功能:
CCuaternion operator + (CCuaternion q1, CCuaternion const &q2)
{
return q1 += q2;
}
这可以让您的代码非常简单直观,还可以让人们在您的课程中使用+=
。
答案 1 :(得分:0)
你的做法是错误的:
CCuaternion operator + (const CCuaternion& q2) const; // at CCuaternion.h
CCuaternion CCuaternion::operator + (const CCuaternion &q2) const { // at Ccuaternion.cpp
return CCuaternion(w + q2.w,
x + q2.x,
y + q2.y,
z + q2.z);
}
+=
const
q2
修饰符
醇>
<强>更新强>
在C ++ 98中,const
表示logically constant
,程序员承诺在函数内部不会更改参数的状态。
(注意:我在声明末尾更改了添加const
的签名,因此this
也可以保持不变)
那么,为什么你需要const?