亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

后置++ 運算符重載

Coordinate.h

-----------------------------------------------------------------------------

#ifndef COORDINATE_H
#define COORDINATE_H
class Coordinate
{
?? ?//friend Coordinate &operator-(Coordinate &Coor);?? ??? ??? ?//友元一重運算符重載
public:
?? ?Coordinate(int x = 0, int y = 0);?? ??? ??? ??? ??? ??? ?

?? ?Coordinate& operator-();?? ??? ??? ??? ??? ??? ??? ??? ??? ?//成員函數一重運算符重載
?? ?/*?? ?前置/后置 ++?? ?*/
?? ?Coordinate& operator++();?? ??? ??? ??? ??? ??? ??? ??? ??? ?//前置++
?? ?Coordinate operator++(int);?? ??? ??? ??? ??? ??? ??? ??? ??? ?//后置++
?? ?int getX();
?? ?int getY();
private:
?? ?int m_iX;
?? ?int m_iY;
};

#endif

Coordinate.cpp

--------------------------------------------------------------------------

#include "Coordinate.h"

Coordinate::Coordinate(int x,int y)
{
?? ?m_iX = x;
?? ?m_iY = y;
}

Coordinate & Coordinate::operator-()
{
?? ?m_iX = -m_iX;
?? ?m_iY = -m_iY;
?? ?return *this;
}

Coordinate & Coordinate::operator++()
{
?? ?m_iX++;
?? ?m_iY++;
?? ?return *this;
}

Coordinate Coordinate::operator++(int)
{
?? ?Coordinate Old(*this);

?? ?m_iX++;
?? ?m_iY++;
?? ?return Old;
}




int Coordinate::getX()
{
?? ?return m_iX;
}

int Coordinate::getY()
{
?? ?return m_iY;
}

main.cpp

--------------------------------------------------------------------------

#include <iostream>
#include "Coordinate.h"
using namespace std;


int main()
{
?? ?Coordinate *coor = new Coordinate(1, 3);

?? ?cout<< coor->getX()<<","<<coor->getY()<<endl;
?? ?cout << ((*coor)++).getX() << ","
?? ??? ?<< ((*coor)++).getY() << endl;

?? ?delete coor;
?? ?coor = NULL;

?? ?system("pause");
?? ?return 0;
}
----------------------------------------------------------

問題? 當后置++ 輸出的結果是 2,3 。正好和1,4相反

求解惑

正在回答

2 回答

你這個把兩個后置++放在一條cout語句中輸出,按照C++標準會產生一個未定義的行為。編譯器在處理輸出流的過程是按照自右向左的順序對各輸出項進行求值的。所以先進行((*coor)++).getY()的求值得到3,再進行((*coor)++).getX()的求值得到2,最后按順序輸出2,3。要想得到1,4最好將其分成兩條cout語句來寫。

這就和int a = 1; cout << a++ << a++ << endl;得到的結果是2,1的道理是一樣的。

3 回復 有任何疑惑可以回復我~
#1

知否bot丶 提問者

多謝,問題后,我我試了下正常,卻不知道原因。多謝老師解惑
2018-10-08 回復 有任何疑惑可以回復我~

a=i++;實際意義為a=1,i=i+1;兩條語句,所以?

((*coor)++).getX() 的意思是?*coor->getX() (數據流輸出結果),coor->operator++(int);

然后同理((*coor)++).getY() 的意思是?*coor->getX() (數據流輸出結果),coor->operator++(int);

這個和運算的優先級有關。

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

舉報

0/150
提交
取消
C++遠征之模板篇
  • 參與學習       91140    人
  • 解答問題       325    個

本C++教程力求即學即會,所有知識以實踐方式講解到操作層面

進入課程

后置++ 運算符重載

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號