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

后置++ 运算符重载

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++远征之模板篇
  • 参与学习       91174    人
  • 解答问题       318    个

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

进入课程

后置++ 运算符重载

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