为了账号安全,请及时绑定邮箱和手机立即绑定

这个代码是练习题运行时提示有错误,望大师指教

这个代码是练习题运行时提示有错误,望大师指教

C++
qliushiyi 2016-01-16 00:16:06
#include <iostream> using namespace std; /**  * 定义Coordinate类  * 数据成员:m_iX,m_iY  * 成员函数:构造函数  * 重载--运算符,重载+运算符  */ class Coordinate { friend Coordinate &operator+(Coordinate &c); public:     Coordinate(int x, int y) { m_iX = x; m_iY = y; }     // 前置--运算符重载 Coordinate &operator--()     {         --m_iX;         --m_iY;         return *this;     }     // 后置--运算符重载     Coordinate operator--(int)     {         Coordinate old(*this);         this->m_iX--;         this->m_iY--;         return old;     }     // +号运算符重载 Coordinate &operator+(Coordinate &c)     {         m_iX=+m_iX;         m_iY=+m_iY;         return c;     } public: int m_iX; int m_iY; }; int main(void) { Coordinate coor1(1, 3); Coordinate coor2(2, 4); Coordinate coor3(0, 0); coor1--; --coor2; coor3 = coor1 + coor2; cout << coor3.m_iX << endl; cout << coor3.m_iY << endl; return 0; }
查看完整描述

2 回答

?
onemoo

TA贡献883条经验 获得超454个赞

你重载的加法运算符没做什么事啊:

  • 没有改变加法的第一个操作数—— m_iX=+m_iX; 这样的代码不是什么都没做吗!?

  • 还直接返回了第二个操作数

所以 coor3 = coor1 + coor2; 这句就直接把coor2赋值给了coor3,而coor2之前被自减为(1, 3),所以coor3也是(1, 3)。

这是你想要的行为吗?


你的加法运算符是不是想要将两个坐标加起来?

也许应该写成这样:

Coordinate operator+(const Coordinate &r)
{
    Coordinate rez(m_iX + r.m_iX, m_iY + r.m_iY);
    return rez;
}

   


查看完整回答
1 反对 回复 2016-01-20
?
wangben2012

TA贡献1条经验 获得超0个赞

    // +号运算符重载

    Coordinate &operator+(Coordinate &c)

    {

        c.m_iX += this.m_iX;

        c.m_iY += this.m_iY;

        return c;

    }

要区分变量属于的对象,不加this默认的当前的操作对象。

查看完整回答
反对 回复 2016-01-20
  • 2 回答
  • 0 关注
  • 1349 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信