首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作员过载。Q= q1+q2,q1正在修改,但我希望q1和q2完好无损

操作员过载。Q= q1+q2,q1正在修改,但我希望q1和q2完好无损
EN

Stack Overflow用户
提问于 2015-03-07 00:28:51
回答 2查看 63关注 0票数 0

就像1到2周前,我学会了操作符重载,我想我知道它是如何工作的,但是我试图重载操作符+,所以它返回一个新的CCuaternion,它运行良好,但是

代码语言:javascript
复制
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中,我有一个名为qsuma的对象CCuaternion,它接收重载返回的CCuaternion。看起来是这样的:

代码语言:javascript
复制
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相同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-07 00:36:07

你这样做是错误的:

代码语言:javascript
复制
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);
}
  1. 你在用+=
  2. 请参见用于constq2修饰符

更新

在C++98中,const的意思是logically constant,程序员承诺在函数中不会更改参数的状态。

(注意:我更改了签名,在声明末尾添加了const,这样this也可以是常量)

那你为什么需要康斯特?

  1. 这是一个很好的实践:如果函数不会改变值,那么使用const就更礼貌了。
  2. 您可能需要在另一个上下文中,我的意思是,您必须能够应用这个运算符不仅对变量,而且对常量。
票数 0
EN

Stack Overflow用户

发布于 2015-03-07 01:28:53

重载加法操作符的首选方法如下:

代码语言:javascript
复制
CCuaternion & CCuaternion::operator += (CCuaternion const &q2)
{
    w += q2.w;
    x += q2.x;
    y += q2.y;
    z += q2.z;

    return *this;
}

这是一个非会员的功能:

代码语言:javascript
复制
CCuaternion operator + (CCuaternion q1, CCuaternion const &q2)
{
    return q1 += q2;
}

这使您的代码非常简单和直观,并且还允许人们在类中使用+=

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28909941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档