Как перегрузить оператор ++ двумя разными способами для постфикса a++
и префикса ++a
?
c++
operator-overloading
новобранец
источник
источник
Ответы:
Должно получиться так:
источник
Number operator++ (int)
принимаетint
параметр как параметр, даже если вы его не используете?++x
является префиксом и, следовательно, вызывает,operator++()
аx++
является постфиксом и, таким образом, вызываетoperator++(int)
Разница заключается в том, какую сигнатуру вы выбираете для своей перегрузки (ов)
operator ++
.Цитируется из соответствующей статьи по этой теме в FAQ по C ++ (подробности см. Здесь):
PS: Когда я узнал об этом, все, что я увидел изначально, это фиктивный параметр, но на самом деле различные возвращаемые типы более интересны; они могут объяснить, почему
++x
считается более эффективным, чемx++
в целом .источник
У вас есть два способа перегрузить два оператора (префиксный / постфиксный) ++ для типа T:
Объектный метод:
Это самый простой способ, использующий «общую» идиому ООП.
Функция объекта, не являющаяся членом:
Это еще один способ сделать это: пока функции находятся в том же пространстве имен, что и объект, на который они ссылаются, они будут учитываться, когда компилятор будет искать функцию для обработки
++t ;
илиt++ ;
код:Важно помнить, что с точки зрения C ++ (включая точку зрения компилятора C ++) эти функции, не являющиеся членами, по-прежнему являются частью интерфейса T (до тех пор, пока они находятся в одном пространстве имен).
Нотация функций, не являющихся членами, дает два потенциальных преимущества:
источник
Объявить так:
Реализуйте правильно - не связывайтесь с тем, что все знают, что они делают (увеличивайте, затем используйте, используйте, затем увеличивайте).
источник
Я знаю, что уже поздно, но у меня была та же проблема, и я нашел более простое решение. Не поймите меня неправильно, это то же самое решение, что и верхнее (опубликовано Мартином Йорком). Это просто немного проще. Самую малость. Вот:
Вышеупомянутое решение немного проще, потому что оно не использует временный объект в методе постфикса.
источник