Когда я вызываю r--; Мой объект сбрасывает значения до 0. Любые идеи?Перегрузка оператора (-) устанавливает переменные в 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)
Как вы написали здесь, 'r -' уменьшает указатель, поэтому 'r' больше не указывает на выделенный вами объект. Попытка использовать или смотреть на то, на что указывает, дает неопределенное поведение. –
Вашему оператору необходимо изменить 'this-> length' и' this-> width', а не те, что указаны в копии. Оператор postfix должен изменить 'this' и вернуть копию состояния объекта ранее, поэтому вам нужно заменить' temp.length -; 'на' length -; 'и ditto для' width'. – cdhowie
BTW: Вы должны реализовать 'MyClass :: operator - (int)' с 'MyClass :: operator -()'. – Deduplicator