Перегрузка унарных операторов

При использовании унарных операторов в выражении участвует только один операнд — сам объект. Примеры унарных операторов: + (унарный плюс), - (унарный минус), * (разыменование), & (взятие адреса), ~ (двоичная инверсия) и ! (логическое отрицание).

При перегрузке унарных операторов «операторный» метод не принимает параметров. Внутри метода ко всем членам объекта можно обращаться напрямую или через указатель this. Дружественной или обычной функции передается один параметр — объект класса. В качестве примера перегрузим унарный минус с помощью «операторного» метода, а оператор ! с помощью дружественной функции (листинг 14.2).

Листинг 14.2. Перегрузка унарных операторов

#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-() const;                    // -obj
   friend bool operator!(const C &obj);    // !obj
};

int main() {
   C obj1(10), obj2;
   obj2 = -obj1;
   std::cout << obj2.getX() << std::endl;  // -10
   std::cout << (!obj1) << std::endl;      // 0
   return 0;
}

C C::operator-() const {                   // -obj
   return C(-x_);
}
bool operator!(const C &obj) {             // !obj
   return !(obj.x_);
}

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов