Перегрузка операции инкремента

266
13 апреля 2018, 17:03

Перегрузил операцию инкремента специально для своего класса, но возникла проблема: если написать my_class++ то код не работает, зато при ++my_class все выполняется правильно.

my_class &operator++(my_class &in)
{
}
Answer 1

Вы перегрузили оператор преинкремента, он обычно выглядит так:

my_class& operator++(my_class &in)
{
    // какие-то инкрементирующие действия
    return in;
}

Этот оператор вызвается кодом:

my_class A;
++A;

Оператор постинкремента имеет вид:

my_class operator++(my_class &in, int dummy)
{
    my_class tmp = in;
    // Какие-то инкрементирующие действия
    return tmp;
}

Этот оператор вызвается кодом:

my_class A;
A++;

Обратите внимание на следующее:

1) Сигнатура оператора постинкремента имеет фиктивный аргумент int

2) Преинкремент возвращает ссылку на класс, который получился после инкрементирования

3) Постинкремент перед изменением in сохраняет его в временную переменную, чтобы потом вернуть его "до изменения" (и возвращает не ссылку, а копию).

READ ALSO
Методы класса по умолчанию

Методы класса по умолчанию

Какие методы классы обязательно присутствуют в классе? Я знаю следующие:

246
Итератор следующий за последним

Итератор следующий за последним

Известно что метод end() возвращает итератор следующий за последним, как может быть за последнем итератором еще один итератор ведь последний...

214
Вывод string массива в фаил с <name.type>

Вывод string массива в фаил с <name.type>

Необходимо создать файл с названием filename (Пользователь вводит сам) и расширение у него должно быть всегдаahk 1

251