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

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

СВох 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, которые вы определили.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: