Перегрузка постфиксного оператора ++
#include <iostream> using namespace std; class Time { private: int hours; // 0 to 23 int minutes; // 0 to 59 public: // required constructors Time(){ hours = 0; minutes = 0; } Time(int h, int m){ hours = h; minutes = m; } // method to display time void displayTime() { cout << "H: " << hours << " M:" << minutes << endl; } Time& operator++() { ++minutes; if (minutes>=60) { ++hours; minutes = minutes - 60; } return *this; } Time& Time::operator++(int){ Time temp(hours, minutes); minutes++; if (minutes >= 60) { hours++; minutes = minutes - 60; } return *this; } }; int main() { Time T1(11, 59), T2(10, 40); T2 = ++(++T1); // T1.displayTime(); // display 12,01 ok T2.displayTime(); // display 12,01 ok T2 = (T1++)++; T1.displayTime(); // display 12,03 οκ T2.displayTime(); // display 12,03 why?? i think it must be 12,01 return 0; }
Что я уже пробовал:
Проблема заключается в объекте T2
Philippe Mori
Вы почти всегда должны следовать предопределенным сигнатурам операторов при перегрузке оператора. Постфиксный оператор должен быть объявлен как Time operator++(int)
Всегда полезно прочитать документацию перед написанием кода, а не гадать, а затем гадать, почему код не работает.
Philippe Mori
Кстати, на мой взгляд, не стоит перегружать оператор ++ в этом случае, так как может быть не очевидно, что инкремент равен 1 минуте. Что делать, если в какой-то момент Вы решите, что время должно иметь разрешение 1 секунда. Лучше быть явным, и это облегчит обслуживание вашего кода.
Philippe Mori
Кроме того, ваши комментарии о отображаемых значениях не соответствуют фактическому коду. Ваш код будет отображать H: 12M: 1. Если вы потратите время на то, чтобы написать то, что выводит код, по крайней мере, приложите усилия, чтобы соответствовать фактическому выходу.