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

  Юрий  | 

    | 

  Обновл. 12 Апр 2018  | 

 3286

 ǀ   4 

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

Например, перегрузим унарный оператор минус () для класса 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 (23 оценок, среднее: 4,83 из 5)
Загрузка...

Комментариев: 4

  1. Аватар kmish:

    Да, с унарным+ бред какой-то.
    Может, он должен как унарный- работать и инвертировать обратно в +, если значения отрицательные.
    Что-то типа:

    Хотя опять же возникает вопрос, зачем он нужен тогда, если унарный- это может сделать…

  2. Аватар Илья:

    А если значения членов Something будут отрицательными?
    Разве такая функция не вернёт нам отрицательные значения?

  3. Аватар Torgu:

    Не очень понимаю, зачем вообще объекту нужен унарный плюс, как в задании? Он же никак совершенно не меняет объект

    1. Аватар Александр:

      Унарный плюс действительно совершенно бесполезный оператор. Добавлен он исключительно для симметрии.
      Для базовых типов он не делает ничего. Но при желании Вы можете придать ему некоторый смысл конкретно для Ваших объектов. Например, можно позаимствовать из JS синтаксис:

      для превращения строкового типа в числовой… довольно удобно

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

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