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

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

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

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

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

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

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

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

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

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

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

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

2 Многофайловый проект, использующий класс cBox

Здесь показано представление всех классов проекта, но, конечно же, на данный момент ни одного еще нет. Хотя ни один класс пока не определен, среда Visual C++ 2010 уже кое-что включила сюда. Можете использовать среду Visual C++ 2010 для создания каркаса нашего класса СВох, а также файлов, которые к нему относятся. Щелкните правой кнопкой мыши на проекте Box в представлении классов и в появившемся контекстном меню выберите пункты Add→Class (Добавить→Класс). Затем в левой панели диалогового окна Add→Class (Добавить класс) выберите категорию классов C++ и шаблон C++ Class (Класс C++) — в правой панели, после чего нажмите клавишу <Enter>. После этого введите в диалоговом окне Generic C++ Class Wizard (Мастер создания общих классов C++) имя класса, который хотите создать (СВох) (рис. 4).

Рис. 3. Вкладка Class View проекта

Рис.4. Мастер создания общих классов C++

Имя файла, отображенное в диалоговом окне (Box.cpp), используется для размещения реализации класса, состоящей из определения функций-членов класса. Здесь будет находиться исполняемый код класса. Код, состоящий из определений класса, сохраняется в файлах с расширением .h, а код определения его функций — в файлах с расширением .срр. Обычно каждое определение класса попадает в собственный файл .h, а реализация каждого класса — в собственный файл .срр.

После щелчка на кнопке Finish (Готово) в диалоговом окне происходят два события.

  1. Создается файл Box.h, в котором содержится каркас определения класса СВох. Он включает конструктор без аргументов и деструктор.

  2. Создается файл Box.cpp, в котором содержится каркас определения реализации функций класса, включая тела конструктора и деструктора, — разумеется, пустые.

Панель редактора, отображающая код, должна выглядеть так, как показано на рис. 5. Если она еще не отображена, щелкните в представлении класса правой кнопкой мыши на классе СВох.

Рис. 5. Панель редактора с кодом класса СВох

Как видите, над панелью, содержащей листинг кода класса, расположены два элемента управления. Левый отображает текущее имя класса — СВох, а щелчок на кнопке справа от имени класса отобразит список всех классов проекта. Начнем разработку класса СВох на основе того, что нам автоматически предоставляет среда разработки Visual C++.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]