Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Перегрузка операторов инкремента и декремента
Операторы инкремента (++
) и декремента (--
) также являются унарными операторами, но они изменяют сам объект. Кроме того, операторы могут использоваться в постфиксной или префиксной формах. При постфиксной форме (x++
) возвращается значение переменной перед операцией, а при префиксной форме (++x
) — вначале производится операция и только потом возвращается значение.
Прототипы «операторных» методов:
<Название класса> &operator++(); // ++obj
<Название класса> &operator--(); // --obj
<Название класса> operator++(int); // obj++
<Название класса> operator--(int); // obj--
Прототипы дружественных функций:
friend <Название класса> &operator++(<Название класса> &); // ++obj
friend <Название класса> &operator--(<Название класса> &); // --obj
friend <Название класса> operator++(<Название класса> &, int); // obj++
friend <Название класса> operator--(<Название класса> &, int); // obj--
Целочисленный параметр, используемый в прототипах при постфиксной форме, можно проигнорировать. По умолчанию этот параметр имеет значение 0
. Пример перегрузки оператора инкремента приведен в листинге 14.3.
Листинг 14.3. Перегрузка оператора инкремента
#include <iostream>
class C {
int x_;
public:
C() { x_ = 0; } // Конструктор по умолчанию
explicit C(int x) { x_ = x; } // Обычный конструктор
C(const C &c) { x_ = c.x_; } // Конструктор копирования
int getX() const { return x_; }
C &operator++(); // ++obj
C operator++(int); // obj++
};
int main() {
C obj1(10), obj2;
obj2 = ++obj1;
std::cout << obj1.getX() << std::endl; // 11
std::cout << obj2.getX() << std::endl; // 11
obj2 = obj1++;
std::cout << obj1.getX() << std::endl; // 12
std::cout << obj2.getX() << std::endl; // 11
++obj2;
std::cout << obj1.getX() << std::endl; // 12
std::cout << obj2.getX() << std::endl; // 12
return 0;
}
C &C::operator++() { // ++obj
++x_;
return *this;
}
C C::operator++(int x) { // obj++
// std::cout << x << std::endl; // 0
C tmp(x_);
++(*this);
return tmp;
}
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов