double arrow

Анализ объектов CBox

Рассмотрим две функции аналитических операторов – operator/()и operator%().

Оператор деления определяет, сколько объектов CBox, идентичных тому, который указан в правом операнде, может быть помещено в объекте CBox, указанном в левом операнде. Чтобы не слишком усложнять, предположим, что все объекты CBox упаковываются вверх, т.е. по вертикальному измерению. Также предположим, что все они выравниваются по длине. Без этих предположений все было бы несколько сложнее.

Проблема заключается в том, чтобы определить, сколько объектов правого операнда может быть помещено в один слой, и затем решить, сколько слоев мы можем иметь в объекте CBox левого операнда.

Это можно сделать в виде функции-члена примерно так, как показано ниже.

Сначала эта функция определяет, сколько объектов СВох правого операнда может поместиться в слое с выравниванием их длин по длине СВох левого операнда. Это число сохраняется в переменной tcl. Затем можно вычислить, сколько их может поместиться в слое с выравниванием их длин по ширине СВох левого операнда. И наконец, максимальное из двух полученных значений умножается на количество слоев, в которые можно уложить ящики, и это значение возвращается. Описанный процесс проиллюстрирован на рис. 2.

 
 


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

Мы рассматриваем две возможности: размещение ящика bВох в ящике аВох, когда длинные стороны первого выравниваются по длине второго, и когда длины ящика bВох выравниваются по ширине ящика аВох.

Другая аналитическая функция, оператор operator%(), предназначена для получения свободного объема в упакованном ящике аВох; она проще, поскольку вы можете использовать уже написанный оператор для ее реализации. Ее можно написать в виде обычной глобальной функции, так как здесь не нужен доступ к закрытым (private) членам класса.

Это вычисление реализуется очень легко с помощью существующих функций класса. Результат — объем большего ящика, аВох минус объем всех ящиков bВох, которые могут быть помещены в него. Количество объектов bВох, упакованных в объект аВох, дает выражение аВох/bВох, которое использует ранее перегруженный оператор деления. Вы умножаете его на объем объектов bВох, чтобы получить объем, который нужно вычесть из общего объема большего ящика аВох.

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


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



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