Разница между операторами до / после инкремента заключается в том, что один работает непосредственно с объектом (pre-increment: ++ foo), и нужно взять копию объекта и вернуть ее (post increment: foo ++).Немного более подробный способ написать это будет:
// return a new object that represents the old value
overload operator++(int)
{
overload oldValue(count); // take copy
count++; // increment this object
return oldValue;
}
// increment the count, and return a reference to this object
overload& operator++()
{
++count;
return *this;
}
Пока вы могли бы вернуть int (не делайте этого!) , это приведет только кдо путаницы.Фактически это приведет к нескольким проблемам с кодом, таким как:
overload foo = ++someOtherFoo;
, который, если вы вернете int из ++, в конечном итоге вызовет функцию конструктора (а не конструктор копирования) для создания новогообъект.то есть
overload foo = overload(++someOtherFoo);
Этот конструктор может не быть доступным, и поэтому код завершится ошибкой.
Если вы хотите, чтобы ваш объект автоматически преобразовывался в целое число, то правильным способом будет перегрузка оператора приведения, например,
operator int () const
{
return count;
}