Урок 135. Перегрузка унарных операторов плюс, минус и логического НЕ

   ⁄ 

 Обновлено 12 Апр 2018  ⁄ 

⁄   809

Рассмотрим унарные операторы плюс (+), минус (-) и логическое НЕ (!), которые работают с одним операндом. Так как они применяются только к одному объекту, то их перегрузку следует выполнять через методы класса.

Например, перегрузим унарный оператор минус () для класса Dollars:

Примечание: Определение метода можно записать и внутри класса. Здесь мы определили его вне класса для лучшей наглядности.

Всё довольно-таки просто. Перегрузка отрицательного унарного оператора минус (-) осуществляется через метод класса, так как явные параметры в функции перегрузки отсутствуют (только неявный объект, на который указывает скрытый указатель *this). Оператор минус возвращает объект Dollars с отрицательным значением m_dollars. Поскольку этот оператор не изменяет объект Dollars, то мы можем (и должны) сделать функцию перегрузки константной (чтобы иметь возможность использовать этот оператор и с константными объектами класса Dollars).

Обратите внимание, путаницы между отрицательным унарным оператором минус (-) и бинарным оператором минус (-) нет, так как они имеют разное количество параметров.

Вот еще один пример. Оператор ! является логическим оператором НЕ, который возвращает true, если результат выражения «false» и false, если результат выражения «true». Обычно это применяется к переменным типа bool, чтобы проверить, являются ли они true или нет:

В языке С++ значение 0 обозначает false, а любое другое ненулевое значение обозначает true, поэтому если логический оператор ! применять к целочисленным значениям, то он будет возвращать true, если значение переменной — 0 и false, если значение переменной — ненулевое.

Следовательно, при работе с классами, оператор ! будет возвращать true, если значением объекта класса будет «false», «0» или любое другое значение, заданное как дефолтное (по умолчанию) при инициализации и false во всех остальных случаях.



В следующем примере рассмотрим перегрузку унарных операторов минус () и НЕ (!) для класса Something:

Здесь перегруженный оператор НЕ (!) возвращает true, если в Something используются значения по умолчанию (0.0, 0.0, 0.0). Результат выполнения программы выше:

Something is null.

Если же задать любые ненулевые значения для объекта класса Something:

То результатом будет:

Something is not null.

Тест

Реализуйте перегрузку унарного оператора плюс (+) для класса Something.

Ответ

Есть два решения. Первое:

Второе:

Это работает, так как Something, который мы возвращаем, является текущим объектом.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (8 оценок, среднее: 5,00 из 5)
Загрузка...
Подписаться на обновления:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

ПОДПИСЫВАЙТЕСЬ

НА КАНАЛ RAVESLI В TELEGRAM

@ravesli

ПОДПИСАТЬСЯ БЕСПЛАТНО