Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции / Лекция 5-6_n — копия.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
144.59 Кб
Скачать

Int m_dollars;

public:

Dollars (int dollars) {m_dollars = dollars;}

// Выполняем -Dollars через метод класса

Dollars operator- () const;

Int getDollars () const {return m_dollars;}

};

// Эта функция является методом класса!

Dollars Dollars::operator- () const {

return Dollars (-m_dollars);

}

Int main () {

const Dollars dollars1(7);

std::cout << "My debt is " << (-dollars1).getDollars() << " dollars.\n";

return 0;

}

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

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

Операция унарный (-) возвращает объект Dollars с отрицательным значением m_dollars.

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

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

Вот еще один пример: операция (!) является логической операцией НЕ, которая возвращает true, если результатом выражения является false и возвращает false, если результатом выражения является true.

Обычно это применяется к переменным типа bool, чтобы проверить, являются ли они true или нет:

If (!isHappy)

std::cout << "I am not happy!\n";

else

std::cout << "I am so happy!\n";

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

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

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

#include <iostream>

class Something {

private:

double m_a, m_b, m_c;

public:

Something (double a = 0.0, double b = 0.0, double c = 0.0):

m_a(a), m_b(b), m_c(c) { }

// Конвертируем объект класса Something в отрицательный

Something operator- () const {

return Something (-m_a, -m_b, -m_c);

}

// Возвращаем true, если используются значения по умолчанию, в //противном случае - false

bool operator! () const {

return (m_a == 0.0 && m_b == 0.0 && m_c == 0.0);

}

double getA () {return m_a;}

double getB () {return m_b;}

double getC () {return m_c;}

};

Int main () {

Something something; // используем конструктор по умолчанию //со значениями 0.0, 0.0, 0.0