操作重载 operator++()
operation overloading operator++()
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& 是正确的 return 类型,但我不明白为什么 Point return 类型也不起作用。
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++() 应该仍然给出相同的结果,因为它会隐式调用它的复制构造函数,所以尽管速度较慢,但我认为它应该给出相同的结果。
当 ++
returns 一个副本时,++(++pos)
中的第二个 ++
在第一个 ++
返回的副本上调用 operator++
],不是原来的pos
。因此原来的pos
只增加了一次。
Point& operator++()
应该return引用非常量以便让我们做,
Point p;
++++p;
如果 returned Point
,您将尝试修改临时文件,这不是您想要的行为。
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& 是正确的 return 类型,但我不明白为什么 Point return 类型也不起作用。
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++() 应该仍然给出相同的结果,因为它会隐式调用它的复制构造函数,所以尽管速度较慢,但我认为它应该给出相同的结果。
当 ++
returns 一个副本时,++(++pos)
中的第二个 ++
在第一个 ++
返回的副本上调用 operator++
],不是原来的pos
。因此原来的pos
只增加了一次。
Point& operator++()
应该return引用非常量以便让我们做,
Point p;
++++p;
如果 returned Point
,您将尝试修改临时文件,这不是您想要的行为。