当我打电话给r--;我的对象将值重置为0.任何想法?
class MyClass : Superclass {
private:
int length;
int width;
public:
MyClass() {
length = 0;
width = 0;
}
MyClass (int x, int y):Superclass(x/2,y/2){
length = x;
width = y;
}
MyClass operator--(int) {
MyClass temp = *this;
temp.length --;
temp.width --;
return temp;
};
};
创建并尝试课程:
MyClass *r = new MyClass(2,3);
r--; // now length and width = 0 (should be 1,2)
答案 0 :(得分:6)
首先,操作符不会减少它所调用的对象,而是它将返回的副本。它应该单独留下(返回先前的值)并递减对象:
MyClass temp = *this;
this->length--; // this-> is optional
this->width--;
return temp;
其次,r
是一个指针。 r--
递减指针,而不是它指向的对象,使其指向无效的内存位置。之后取消引用它会产生不确定的行为。
我不知道你为什么在这里使用new
;你几乎肯定只想要一个变量:
MyClass r(2,3);
r--; // should behave as expected.
如果由于某种原因确实需要指针,则必须取消引用才能获取对象:
(*r)--;
并且不要忘记在完成对象后删除它。而不是之前。