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

求老师解答这个程序的错误

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


正在回答

3 回答

#include <iostream>
using namespace std;

/**
 * 定义Coordinate类
 * 数据成员:m_iX,m_iY
 * 成员函数:构造函数
 * 重载--运算符,重载+运算符
 */
class Coordinate
{
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 &coor)
 {
        Coordinate coordinate(0,0);
        coordinate.m_iX = this->m_iX+coor.m_iX;
        coordinate.m_iY = this->m_iY+coor.m_iY;
        return coordinate;
 }
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;
}

为什么重载的前置--和后置的--没啥变化都是自减后参加的运算?

0 回复 有任何疑惑可以回复我~

Coordinate &operator+(Coordinate &c)

    {

        m_iX += c.m_iX;

        m_iY += c.m_iY;

        return *this;

    }


0 回复 有任何疑惑可以回复我~

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

  • 没有改变加法的第一个操作数—— 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;
}

2 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之模板篇
  • 参与学习       91156    人
  • 解答问题       318    个

本C++教程力求即学即会,所有知识以实践方式讲解到操作层面

进入课程

求老师解答这个程序的错误

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信