#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; }
wangben2012
TA贡献1条经验 获得超0个赞
// +号运算符重载
Coordinate &operator+(Coordinate &c)
{
c.m_iX += this.m_iX;
c.m_iY += this.m_iY;
return c;
}
要区分变量属于的对象,不加this默认的当前的操作对象。
- 2 回答
- 0 关注
- 1349 浏览
添加回答
举报
0/150
提交
取消