Зачем возвращать объект Month из этой функции-перегрузчика оператора?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Зачем возвращать объект Month из этой функции-перегрузчика оператора?

Сообщение Anonymous »

Я читал принципы Бьярна Страуструпа и практику использования C++. В главе 9.6 о перегрузке операторов он приводит следующий пример:

Код: Выделить всё

enum class Month {
Jan=1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
};

Month operator++(Month& m)                                 // prefix increment operator
{
m = (m==Month::Dec) ? Month::Jan : Month(static_cast(m)+1);       
return m;
}
как пример определения оператора приращения ++ для перечисляемого класса Month. Затем он говорит, что это можно использовать следующим образом:

Код: Выделить всё

Month m = Month::Sep;
++m;       // m becomes Oct
++m;       // m becomes Nov
++m;       // m becomes Dec
++m;       // m becomes Jan (“wrap around”)
Но я не понимаю смысла возвращать Month, когда вы передаете объект Month по ссылке и меняете его. Почему бы не написать функцию вот так:

Код: Выделить всё

void operator++(Month& m)                                 // prefix increment operator
{
m = (m==Month::Dec) ? Month::Jan : Month(static_cast(m)+1);       
}
При тестировании код работал нормально. Мне интересно, что я упустил из виду, поскольку этот парень Страуструп довольно хорошо знает язык :)

Подробнее здесь: https://stackoverflow.com/questions/784 ... r-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»