Перейти к основному содержимому

Переход от структур к классам

Алиас: Классы.

Цель работы

Цель данной лабораторной работы заключается в освоении навыков:

  • создания программных объектов пользовательских типов с использованием классов;
  • создания статических библиотек для описания классов;
  • ввода-вывода объектов пользовательских типов в файл;
  • перегрузки операций потокового ввода-вывода (<<, >>), операций отношения (<, ==) для пользовательских типов;
  • перегрузки конструктора копирования и операции присваивания;
  • сортировки массивов объектов пользовательских типов, хранящихся в файле, с использованием перегруженных операций.

Задание

Первая часть

  1. Ознакомьтесь с приведенным материалом в (Введении и Пример 1) о переходе от структуры к классу.

  2. Разработайте класс "Планета" для планет солнечной системы (4 характеристики планет разного типа приведены в Приложении 1).

    осторожно

    Имя планеты должно иметь тип char*. Использование string запрещено. Тоже самое касается для полей-строк класса по варианту.

    Память для строк должна выделяться динамически в зависимости от данных (размер выделяемой памяти для поля типа char* не должен задаваться константной). Размер выделяемой памяти для поля char* необходимо определять в зависимости от поступающих данных. Для промежуточного хранения строк с целью считать из файла или с потока cin можно воспользоваться массивом char с заданной длинной через константу (буфер). Далее на основе определения длинны строки, попавшей в буфер, выделить динамически память для поля char*.

    Не забудьте воспользоваться деконструктором, если вы будете использовать динамический массив для строк. Использование деконструктора показано в примере 3.

  3. Создайте статическую библиотеку для класса "Планета" и отладить программу, которая создает один объект класса "Планета" и выводит значения его полей на экран. Пример программы приведен в Примере 4.

  4. Реализуйте функции работы с множеством объектов класса "Планета":

    • чтение БД из файла;
    • запись БД в файл;
    • сортировка БД;
    • добавление нового объекта в БД;
    • удаление объекта из БД;
    • редактирование БД;
    • вывод БД на экран.
    осторожно

    Массив планет и экземпляров класса по варианту должен быть динамическим (задавать размерность массива константной запрещено). Размер динамического массива необходимо изменять в зависимости от количества данных.

    Для реализации вышеперечисленных функций, необходимо:

    1. Создать текстовый файл (в блокноте) с данными о планетах солнечной системы и сохранить его в папке проекта. Первоначально, для отладки, введите две записи.

      осторожно

      Обратите внимание на то, что кодировка файла должна быть ASCII. Объяснение этого в Приложении 1.

      к сведению

      О том, как текстовый файл при сборке с помощью CMake копировать из папки исходного кода в папку сборки (build) исполняемого файла, рассказано в полезной информации.

    2. Добавить в программу ввод–вывод объекта класса "Планета" в текстовый файл.

    Функции реализовывать в виде статических методов класса "Планета". Пример использования статических методов представлен в примере 4, а сам процесс перехода к такой декомпозиции - в примере 5.

    предупреждение

    Обратите внимание, что в демонстрационном режиме необходимо продемонстрировать только все возможности работы с классом "Планета".

Вторая часть

  1. Ознакомьтесь с примером 2 перегрузки операции <<.
  2. Перегрузите конструктор копирования, деструктор и оператор присваивания.
  3. Вставьте в конструкторы и деструктор печать типа "Создание (Удаление) ID n", где n - номер объекта, для которого они вызываются (при реализации данного пункта может быть полезен пример 3).
  4. Перегрузите операцию >> для класса "Планета" и ifstream и прочитайте данные о планетах из файла в массив "Солнечная система" из объектов класса "Планета".
  5. Перегрузите операцию << для классов "Планета" и ofstream и выведите на экран данные из массива.

Третья часть

  1. Перегрузите операции сравнения < и == для класса "Планета", использовав для этого значение одного из полей.
  2. Отсортируйте массив планет солнечной системы, хранящийся в файле, с использованием перегруженных операций.

Четвертая часть

На основе разработанного класса "Планета" выполните задание по варианту (не менее 4 характеристик в классе разного типа). Варианты представлены в приложении 2.

предупреждение

Класс по варианту необходимо упаковать в статическую библиотеку.

Для класса по варианту организуйте интерфейс взаимодействия пользователя с программой в виде меню, позволяющий выполнять следующие действия:

  • чтение БД из файла;
  • запись БД в файл;
  • сортировка БД;
  • добавление нового объекта в БД;
  • удаление объекта из БД;
  • редактирование БД;
  • вывод БД на экран.
предупреждение

Обратите внимание, что данный интерфейс используется только в интерактивном режиме для класса по варианту.

Режимы выполнения программы

В демонстрационном режиме необходимо отобразить весь функционал для класса "Планета". В интерактивном режиме необходимо обеспечить работу с классом по варианту.

Требования к работе

  1. При решении задания лабораторной работы необходимо создать 2 статических библиотеки:
    1. Статическая библиотека с реализацией класса "Планета".
    2. Статическая библиотека с реализацией класса по варианту.
  2. Для сдачи лабораторной работы необходимо выполнить все 4 части задания (полная реализация классов "Планета" и по варианту).

Методический материал

  1. Указания по выполнению работы
  2. Контрольные вопросы
  3. Полезная информация