2 - Классы в C++ (Часть 1).
Лабораторная работа 2 для студентов курса “Программирование на основе классов и шаблонов” 2 семестра кафедры ИУ5 МГТУ им Н.Э. Баумана.
Содержание
Цель работы
Изучить основы объектно-ориентированного программирования в языке C++, освоить понятие класса, его структуры, научиться объявлять классы, создавать объекты и работать с их членами.
Цель данной лабораторной работы заключается в освоении навыков:
- создания программных объектов пользовательских типов с использованием классов;
- перегрузки операций потокового ввода-вывода (<<, >>)
- перегрузки конструктора копирования и операции присваивания;
- создание массива объектов пользовательских типов с использованием перегруженных операций.
Начало работы
Зайдите в свою локальную директорию с репозиторием для выполнения лабораторных работ. Заберите ветку с соответствующей лабораторной работой из общего репозитория:
git pull upstream
или
git pull upstream lab_2
Переключитесь на ветку с текущей лабораторной работой:
git checkout lab_2
Свяжите ветку локального репозитория с вашим удаленным репозиторием:
git push --set-upstream origin lab_2
Задание
Основное задание
-
Разработайте свой класс по варианту (в разработанных характеристиках должна быть хотя бы одна c-строка). Использование string запрещено. В разработанном классе должны быть методы:
- Конструктор по умолчанию;
- Конструктор с параметрами;
- Конструктор копирования;
- Оператор присваивания;
- Деструктор;
- Оператор вставки/вывода в поток;
- Функции get() и set().
-
Создайте один объект вашего класса и выведите значения его полей на экран.
-
Создайте статический массив из пяти объектов. Добавьте в него с консоли несколько объектов, выведите массив на экран.
-
Продумать следующие пункты меню:
- Создание объекта;
- Вывод объекта на экран;
- Добавление объектов в массив;
- Вывод массива на экран;
- Выход.
Соблюдайте принципы разработки Rule of Five, DRY (Don’t Repeat Yourself).
Дополнительные задания (по вариантам)
- квартира, как объект для агентства
- автобус в автопарке
- анкета для опроса населения
- компьютер
- кандидат, участвующий в выборах
- железнодорожный билет
- файл на диске
- книга в библиотеке
- политическая партия
- кафедра института
- автомобиль
- авиабилет
- статья в журнале
- магазин
- абонент телефонной станции
- управление каталогом в файловой системе
- пациент в поликлинике
- дом, как объект ЖЭКа
- строительная бригада
- пищевой набор диеты
- дорога
- музыкальный альбом
- программное обеспечение
- заявки на выполнение работ
- товары в магазине
- участник соревнований
- фильмотека
- винотека
Указания по выполнению лабораторной работы
- Перед началом работы внимательно изучите теоретические сведения, особенно разделы, посвящённые управлению ресурсами и Rule of Five.
- Соблюдайте стандарт C++20 или выше и придерживайтесь единого стиля оформления кода.
- Запрещается использование
std::string; для работы со строками применяйте C-строки с корректным управлением динамической памятью.
- Все поля класса должны быть закрытыми (private), доступ к ним должен осуществляться только через методы класса.
- Реализуйте глубокое копирование объектов при использовании динамической памяти.
- Проверяйте программу на утечки памяти и корректность работы конструкторов и деструктора.
- Код должен быть читаемым, логически структурированным.
Требования к отчёту
Отчёт по лабораторной работе должен содержать:
- Титульный лист с указанием дисциплины, номера лабораторной работы, ФИО студента и группы.
- Цель лабораторной работы.
- Формулировку задания и номер варианта.
- Теоретические сведения по теме работы (выполняются рукописно, разборчивым почерком, на отдельном листе бумаги).
- Описание структуры проекта и используемых файлов.
- Исходный код разработанной статической библиотеки и основного приложения.
- Результаты выполнения программы (скриншоты или вывод в консоль).
- Выводы по результатам выполненной работы.
Контрольные вопросы
- Что такое класс в языке C++?
- Чем класс отличается от структуры?
- Что называется объектом класса?
- Какие члены класса являются закрытыми, а какие — открытыми?
- Для чего используется конструктор по умолчанию?
- В каких случаях вызывается конструктор копирования?
- Для чего необходим оператор присваивания?
- Какую роль выполняет деструктор класса?
- Что такое перегрузка операторов?
- Как выполняется перегрузка операторов потокового ввода и вывода (<<, >>)?
- Почему при работе с C-строками требуется явное управление памятью?
- Как создать массив объектов пользовательского типа?
- В чём заключается разница между статическим и динамическим массивом объектов?
- Что такое инкапсуляция и как она реализуется в классах C++?
- Почему при использовании динамической памяти в классе необходимо реализовывать Rule of Five?
- Rule of Three, Rule of Five и Rule of Zero?