操作重载operator ++()

时间:2015-01-08 17:28:05

标签: c++ operator-overloading

class Point{
private:
    int xpos, ypos;
public:
    Point(int x=0, int y=0) : xpos(x), ypos(y) { }
    void showPosition() const {
        cout<<"["<<xpos<<", "<<ypos<<"]"<<endl;
    } 
    Point& operator++(){  //Point operator++()
        xpos+=1;
        ypos+=1;
        return *this;
    }
};

对于operator ++()我知道Point&amp;是正确的返回类型,但我不明白为什么Point返回类型也不起作用。

    Point operator++(){ 
        xpos+=1;
        ypos+=1;
        return *this;
    }

当我用它来执行

Point pos(1,3);
++(++pos);

我得到了

[2,4]

[3,5] //which is what I should be getting.

我认为没有引用的operator ++()应该仍然给出相同的结果,因为它会隐式调用它的复制构造函数,所以虽然速度较慢,但​​我认为它应该给出相同的结果。

2 个答案:

答案 0 :(得分:2)

++返回副本时,++中的第二个++(++pos)会在第一个operator++返回的副本上调用++,而不是原始pos pos。因此原始{{1}}仅递增一次。

答案 1 :(得分:0)

Point& operator++()

应该通过引用返回非const来让我们这样做,

Point p;
++++p;

如果它返回Point,您将尝试修改不是您想要的行为的临时文件。