перегрузка операторов — C ++ до и после приращения

У меня проблемы с перегрузкой метода пост-приращения.
Мой предварительный прирост в порядке.
У меня также есть пред / пост декременты, и они оба работают отлично.
Тело приращения и уменьшения должно быть одинаковым. Единственное отличие должно быть ++ / -, но я не уверен, почему мой пост не будет работать так же, как мой пост-декремент.

предварительное увеличение

upDate upDate::operator++() {
int julian = convertDateToJulian(datePtr[0], datePtr[1], datePtr[2]);
julian++;
convertDateToGregorian(julian);
return (*this);
}

после увеличения

upDate upDate::operator++(int num) {
upDate temp (*this);
int julian = convertDateToJulian(datePtr[0], datePtr[1], datePtr[2]);
julian++;
convertDateToGregorian(julian);
return temp;
}

после декрета

upDate upDate::operator--(int num) {
upDate temp(*this);
int julian = convertDateToJulian(datePtr[0], datePtr[1], datePtr[2]);
julian--;
convertDateToGregorian(julian);
return temp;
}

Это мое главное

upDate d5(11, 10, 2004);
++d5;
cout << d5 << endl;
cout << "Expected November 11, 2004\n" << endl;

//not working
upDate d6(11, 11, 2004);
d5++;
cout << d6 << endl;
cout << "Expected November 12, 2004\n" << endl;

upDate d11(12, 3, 1992);
d11--;
cout << d11 << endl;
cout << "Expected: December 2, 1992\n" << endl;

Выход:
// дата была первоначально 10 ноября 2004
// ++ прирастить
11 ноября 2004 г.
Ожидается: 11 ноября 2004 г.

// дата была первоначально 11 ноября 2004
// прирастить ++
11 ноября 2004 // выход не должен быть таким
Ожидается: 12 ноября 2004 г.

// дата была первоначально 2 декабря 1992
// decr—
1 декабря 1992 г.
Ожидается: 1 декабря 1992 г.

0

Решение

В твоем главном есть опечатка:

//not working
upDate d6(11, 11, 2004);
d6++;  // <---- you have d5++;
cout << d6 << endl;
cout << "Expected November 12, 2004\n" << endl;
1

Другие решения

У вас есть опечатка. В этом фрагменте кода

//not working
upDate d6(11, 11, 2004);
d5++;
cout << d6 << endl;
cout << "Expected November 12, 2004\n" << endl;

Вы применили оператор пост-приращения к d5

d5++;

но считается d6

cout << d6 << endl;

d6 не изменился.

Также учтите, что правильное объявление оператора предварительного приращения

upDate & upDate::operator++();

то есть оператор должен вернуться именующий. пока ваш оператор возвращает временный объект.

0

По вопросам рекламы [email protected]