Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб раб 2 Использование классов.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
898 Кб
Скачать
☆

Сравнение объектов cBox

Необходимо включить поддержку операторов >, >=, ==, < и <=, чтобы они работали с обоими операндами объектов CBox, а также между объектом CBox и значением типа double. Это можно реализовать в виде обычных глобальных функций, поскольку они не обязаны быть функциями-членами.

  1. Функция проверки того, больше ли константа объекта сВох

Теперь напишите функцию operator< () аналогичным образом.

Вы можете создать реализацию тех же операторов с аргументами в противоположном порядке в терминах двух предыдущих функций. Вы просто используете соответствующие перегруженные функции операторов, которые написали ранее, но с перестановкой аргументов.

Функции, реализующие операторы >= и <=, = = такие же, как первые две, но с заменой оператора < на <= и оператора > — на >=. Реализовать их на этой стадии совсем не сложно. Выполнить самостоятельно.

Итак, у вас есть полный набор операторов сравнения объектов СВох. Имейте в виду, что это также работает с выражениями — до тех пор, пока результаты выражений являются объектами требуемого типа, так что их можно комбинировать с применением перегруженных операторов.

Комбинирование объектов сВох

Теперь пришла очередь перегрузки операторов +, *, / и %. Приступим к ним по порядку. Оператор сложения уже реализован в примере и рассмотрен на лекции и имеет такой прототип.

СВох operator+(const CBox& aBox); // Функция сложения двух объектов СВох

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

Обратите внимание на то, что мы оставили без внимания оператор вычитания. Это благоразумное упущение, чтобы избежать сложностей, которыми чревата ее реализация. Если вы действительно хотите его реализовать и считаете, что это будет полезной идеей, можете попробовать, но вам придется решить, что делать, если результат будет иметь отрицательное значение. Если вы допустите такую концепцию, то должны будете решить, какие размерности ящика могут быть отрицательными и как должен вести себя ящик в последующих операциях.

Оператор умножения очень прост. Он представляет процесс создания ящика, который содержит n ящиков, где n — множитель. Простейшее решение могло бы заключаться в том, чтобы взять значения переменных-членов m_Length или m_Width объекта, который нужно упаковать, и просто умножить их на n, чтобы получить новый объект СВох. Вы можете сделать его чуть более интеллектуальным, проверяя, является ли множитель четным, и, если так, сложить ящики бок о бок, удваивая значение m_Width и умножая m_Length на половину n (рис. 1).

Рис. 1. Графическая трактовка операции умножения для класса СВох

Конечно, вам не нужно проверять, что больше — длина или ширина нового объекта, поскольку конструктор будет делать это автоматически. Вы можете написать версию функции operator*() как функцию-член с левым операндом в виде объекта СВох.

Здесь вы используете оператор % для определения того, является ли n нечетным. Если n нечетное, то значение (n % 2)равно 1 и оператор if дает true. Если n четное, то (n % 2) равно 0 и весь оператор дает в результате false.

Теперь можно использовать только что написанную функцию в реализации версии с левым операндом как целым числом. Это можно оформить в виде обычной функции – не члена.

Данная функция оператора умножения просто обращает порядок операндов, чтобы непосредственно использовать предыдущую версию функции. Это завершает набор арифметических операторов для объектов CBox, которые вы определили.