перегрузка оператора post-increment [дубликат]

Чтобы использовать методы и член объекта, вам сначала нужно создать этот объект. Если вы его не создали (переменная, которая должна содержать объект, не инициализируется), но вы пытаетесь использовать его методы или переменные, вы получите эту ошибку.

Иногда вы можете просто забыть инициализировать .

Отредактировано: new не может вернуть значение null, но исключение огня при ошибке. Давно это было на некоторых языках, но не больше. Спасибо @John Saunders за указание на это.

5
задан iammilind 12 October 2011 в 13:55
поделиться

4 ответа

Предварительные и последующие приращения представляют собой два разных оператора и требуют отдельных перегрузок.

C ++ не допускает перегрузки только по типу возврата, поэтому наличие разных типов возвращаемых данных, как в вашем примере, не будет достаточно для устранения двусмысленности двух методов.

Фиктивный аргумент - это механизм, который разработчик C ++ выбрал для устранения неоднозначности.

9
ответ дан NPE 5 September 2018 в 07:14
поделиться

В C ++ функции / методы не могут быть перегружены возвращаемым типом, только по списку параметров. Игнорируя тот факт, что операторы префикса и постфикса являются операторами, представьте, были ли они просто простыми другими функциями, как будет работать компилятор, который будет использоваться на основе возвращаемого типа? Например,

int x = 2;

const int DoIt()
{
    return 1;
}

int& DoIt()
{
    return x;
}

int y = DoIt();

Поскольку перегрузки операторов на самом деле являются просто функциями в глубине души, компилятор не может отличить их от типа возврата.

См. http: // www.parashift.com/c++-faq-lite/operator-overloading.html#faq-13.14

2
ответ дан blaaaaaaah 5 September 2018 в 07:14
поделиться

Оператор, как и любая функция, идентифицируется сигнатурой. Тип возврата и модификаторы перед именем функции / оператора не включаются в это. Имена ваших операторов здесь

operator++()
operator++(int)

Это единственный способ, которым компилятор отличает эти два. Что касается возвращаемых значений Digit& и Digit; Они необходимы из-за того, что предполагается использовать ++ x и x ++.

2
ответ дан Captain Giraffe 5 September 2018 в 07:14
поделиться

В Pre-Increment / Decrement и Post-Increment / Decment разница основана только на фиктивном параметре в перегруженной функции

operator++()         => Prefix Increment
operator--()         => Prefix Decrement

operator++(int)      => Postfix Increment
operator--(int)      => Postfix Decrement

тип возврата может быть таким же. вы также можете обратиться: http://www.tutorialspoint.com/cplusplus/increment_decrement_operators_overloading.htm

1
ответ дан Eswaran Pandi 5 September 2018 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: