操作重载运算符++()

operation overloading operator++()

本文关键字:运算符 重载 操作      更新时间:2023-10-16
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;
    }
};

对于运算符++(),我知道Point&是正确的返回类型,但我不明白为什么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++() 仍然应该给出相同的结果,因为它会隐式调用其复制构造函数,所以虽然速度较慢,但我认为它应该给出相同的结果。

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

Point& operator++()

应该通过引用非常量返回,以便让我们做,

Point p;
++++p;

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