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

Int main () {

Dollars ten (10);

Dollars seven (7);

if (ten > seven)

std::cout << "Ten dollars are greater than seven dollars.\n";

if (ten >= seven)

std::cout << "Ten dollars are greater than or equal to seven dollars.\n";

if (ten < seven)

std::cout << "Seven dollars are greater than ten dollars.\n";

if (ten <= seven)

std::cout << "Seven dollars are greater than or equal to ten dollars.\n";

return 0;

}

Всё просто.

Но, как вы уже могли бы заметить, операции (> и <=) являются логическими противоположностями, поэтому одну из них можно было бы определить через вторую.

Та же ситуация и с (< и >=).

Но, поскольку определения функций перегрузки столь просты, а операции в строке объявления функции так хорошо сочетаются с операциями в строке возврата результата, мы этого не делали.

Тест

Задание №1

Используя класс Dollars, приведенный выше, перепишите операторы < и <=, используя их логические противоположности.

Задание №2

Добавьте перегрузку операторов << и < в класс Car, представленный выше, чтобы следующий фрагмент кода:

#include <iostream>

#include <string>

#include <vector>

#include <algorithm>

int main () {

std::vector<Car> v;

v.push_back (Car("Ford", "Mustang"));

v.push_back(Car("Renault", "Logan"));

v.push_back(Car("Ford", "Ranger"));

v.push_back(Car("Renault", "Duster"));

std::sort(v.begin(), v.end()); // требуется перегрузка оператора < //для класса Car

for (auto &car : v)

std::cout << car << '\n'; // требуется перегрузка оператора << //для класса Car

return 0;

}

Выдавал следующий результат:

(Ford, Mustang)

(Ford, Ranger)

(Renault, Duster)

(Renault, Logan)

Перегрузка операторов инкремента и декремента

  

Перегрузка операций инкремента (++) и декремента (−−) довольно-таки проста, но с одним маленьким нюансом.

Есть две версии операторов инкремента и декремента: версия префиксная (например, ++x, --y) и версия постфиксная (например, x++, y--).

Поскольку операции инкремента и декремента являются унарными и изменяют свои операнды, то перегрузку следует выполнять через методы класса.

Перегрузка операций инкремента и декремента версии префикс аналогична перегрузке любых других унарных операторов:

#include <iostream>

class Number {

private:

Int m_number;

public:

Number (int number=0): m_number (number) { }

Number& operator++ ();

Number& operator-- ();

friend std::ostream& operator<< (std::ostream &out, const Number &n);

};

Number& Number::operator++ () {

// Если значением переменной m_number является 8, то выполняем //сброс значения m_number на 0

if (m_number == 8)

m_number = 0;

// В противном случае, просто увеличиваем m_number на единицу

else

++m_number;

return *this;

}

Number& Number::operator--() {

// Если значением переменной m_number является 0, то присваиваем //m_number значение 8

if (m_number == 0)

m_number = 8;

// В противном случае, просто уменьшаем m_number на единицу

else

--m_number;

return *this;

}

std::ostream& operator<< (std::ostream &out, const Number &n) {

out << n.m_number;

return out;

}