#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個贊
你重載的加法運算符沒做什么事?。?/p>
沒有改變加法的第一個操作數——?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 關注
- 1445 瀏覽
添加回答
舉報
0/150
提交
取消
