猿问

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

#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;
}


qliushiyi
浏览 1350回答 2
2回答

onemoo

你重载的加法运算符没做什么事啊:没有改变加法的第一个操作数—— 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; }   

wangben2012

    // +号运算符重载    Coordinate &operator+(Coordinate &c)    {        c.m_iX += this.m_iX;        c.m_iY += this.m_iY;        return c;    }要区分变量属于的对象,不加this默认的当前的操作对象。
随时随地看视频慕课网APP
我要回答