Изучаю С++ по книге Лафоре, прошел перегрузку операций, но при решении Упражнений появился вопрос.
Вот такой коротенький пример, нужно перегрузить унарную операцию ++, постфиксную запись и префиксную.
Есть условие! Задаю число, и начинаю прибавлять к нему по единице, когда доходит до 10, счет начиниется сначала.
Counter operator++(int)
{
count++;
if (count >9)
count= count - 10;
return Counter(count);
}Проблема в том, что если есть условие, то операция c2=c1++ работает не верно, я ожидаю что в с2 запишется значение с1, а затем с1 инкрементируется, но получается, что с1 сначала инкрементируется, а затем записывается в с2, как будто выполнятеся с2=++с1.
Если никакого условия не ставить
Counter operator++(int)
{ return Counter(count++);}то все работает как надо.
Подскажите как заставить работать условие моем варианте???
Полный листинг
#include <iostream>
using namespace std;
/////////////////////////////
class Counter
{
private:
int count;
public:
Counter(): count(0)
{}
Counter(int c): count(c)
{}
int get_count()
{ return count; }
Counter operator++()
{ return Counter(++count);}
//Работает
//Counter operator++(int)
//{ return Counter(count++);}
Counter operator++(int)
{
count++;
if (count >9)
count= count - 10;
return Counter(count);
}
};
//////////////////
int main()
{
Counter c1=9, c2;
// Вывод заданных значений
cout << "\nc1 = " << c1.get_count();
cout << "\nc2 = " << c2.get_count();
// Сначала значение с1 присваивается с2, затем с1 инкрементируется
c2=c1++;
// Ожидается, что с1 = 0, с2 = 9
cout << "\nc1 = " << c1.get_count();
cout << "\nc2 = " << c2.get_count() << endl;
return 0;
}