Переход от структур к классам
Алиас: Классы.
Цель работы
Цель данной лабораторной работы заключается в освоении навыков:
- создания программных объектов пользовательских типов с использованием классов;
- создания статических библиотек для описания классов;
- ввода-вывода объектов пользовательских типов в файл;
- перегрузки операций потокового ввода-вывода (
<<,>>), операций отношения (<,==) для пользовательских типов; - перегрузки конструктора копирования и операции присваивания;
- сортировки массивов объектов пользовательских типов, хранящихся в файле, с использованием перегруженных о пераций.
Задание
Первая часть
-
Ознакомьтесь с приведенным материалом в (Введении и Пример 1) о переходе от структуры к классу.
-
Разработайте класс "Планета" для планет солнечной системы (4 характеристики планет разного типа приведены в Приложении 1).
осторожноИмя планеты должно иметь тип
char*. Использованиеstringзапрещено. Тоже самое касается для полей-строк класса по варианту.Память для строк должна выделяться динамически в зависимости от данных (размер выделяемой памяти для поля типа
char*не должен задаваться константной). Размер выделяемой памяти для поляchar*необходимо определять в зависимости от поступающих данных. Для промежуточного хранения строк с целью считать из файла или с потокаcinможно воспользоваться массивомcharс заданной длинной через константу (буфер). Далее на основе определения длинны строки, попавшей в буфер, выделить динамически память для поляchar*.Не забудьте воспользоваться деконструктором, если вы будете использовать динамический массив для строк. Использование деконструктора показано в примере 3.
-
Создайте статическую библиотеку для класса "Планета" и отладить программу, которая создает один объект класса "Планета" и выводит значения его полей на экран. Пример программы приведен в Примере 4.
-
Реализуйте функции работы с множеством объектов класса "Планета":
- чтение БД из файла;
- запись БД в файл;
- сортировка БД;
- добавление нового объекта в БД;
- удаление объекта из БД;
- редактирование БД;
- вывод БД на экран.
осторожноМассив планет и экземпляров класса по варианту должен быть динамическим (задавать размерность массива константной запрещено). Размер динамического массива необходимо изменять в зависимости от количества данных.
Для реализации вышеперечисленных функций, необходимо:
-
Создать текстовый файл (в блокноте) с данными о планетах солнечной системы и сохранить его в папке проекта. Первоначально, для отладки, введите две записи.
осторожноОбратите внимание на то, что кодировка файла должна быть
ASCII. Объяснение этого в Приложении 1.к сведениюО том, как текстовый файл при сборке с помощью CMake копировать из папки исходного кода в папку сборки (
build) исполняемого файла, рассказано в полезной информации. -
Добавить в программу ввод–вывод объекта класса "Планета" в текстовый файл.
Функции реализовывать в виде статических методов класса "Планета". Пример использования статических методов представлен в пример е 4, а сам процесс перехода к такой декомпозиции - в примере 5.
предупреждениеОбратите внимание, что в демонстрационном режиме необходимо продемонстрировать только все возможности работы с классом "Планета".
Вторая часть
- Ознакомьтесь с примером 2 перегрузки операции
<<. - Перегрузите конструктор копирования, деструктор и оператор присваивания.
- Вставьте в конструкторы и деструктор печать типа "Создание (Удаление) ID
n", гдеn- номер объекта, для которого они вызываются (при реализации данного пункта может быть полезен пример 3). - Перегрузите операцию
>>для класса "Планета" иifstreamи прочитайте данные о планетах из файла в массив "Солнечная система" из объектов класса "Планета". - Перегрузите операцию
<<для классов "Планета" иofstreamи выведите на экран данные из массива.
Третья часть
- Перегрузите операции сравнения
<и==для класса "Планета", использовав для этого значение одного из полей. - Отсортируйте массив планет солнечной системы, хранящийся в файле, с использованием перегруженных операций.
Четвертая часть
На основе разработанного класса "Планета" выполните задание по варианту (не менее 4 характеристик в классе разного типа). Варианты представлены в приложении 2.
Класс по варианту необходимо упаковать в статическую библиотеку.
Для класса по варианту организуйте интерфейс взаимодействия пользователя с программой в виде меню, позволяющий выполнять следующие действия:
- чтение БД из файла;
- запись БД в файл;
- сортировка БД;
- добавление нового объекта в БД;
- удаление объекта из БД;
- редактирование БД;
- вывод БД на экран.
Обратите внимание, что данный интерфейс используется только в интерактивном режиме для класса по варианту.
Режимы выполнения программы
В демонстрационном режиме необходимо отобразить весь функционал для класса "Планета". В интерактивном режиме необходимо обеспечить работу с классом по варианту.
Требования к работе
- При решении задания лабораторной работы необходимо создать 2 статических библиотеки:
- Статическая библиотека с реализацией класса "Планета".
- Статическая библиотека с реализацией класса по варианту.
- Для сдачи лабораторной работы необходимо выполнить все 4 части задания (полная реализация классов "Планета" и по варианту).