Проект содержит 7 лабораторных работ по объектно-ориентированному программированию на C++.
Каждая лабораторная работа демонстрирует различные концепции ООП и паттерны проектирования.
Простая программа для расчета объема параллелепипеда.
Файлы: box_capacity.h:1-5, main.cpp:1-9
Тестирование:
Использует Google Test с тестами для положительных, нулевых, отрицательных значений и чисел с плавающей точкой.
Файл: test_main.cpp:1-26
Реализация класса для работы с денежными суммами, хранящими данные в массиве unsigned char.
Основные возможности:
- Конструкторы копирования и перемещения
- Арифметические операции (сложение, вычитание)
- Операции сравнения
- Оператор присваивания удален, используются методы
assign()иmoveAssign()
Файлы:
Money.h:8-37, main.cpp:1-24
Тестирование:
Покрывает конструкторы, арифметические операции, сравнения и операторы присваивания.
Файл: test_main.cpp:5-75
Реализация абстрактного класса Figure и его наследников (Trapezoid, Rhombus, Pentagon).
Базовый класс: Figure.h:1-17
Функциональность:
- Вычисление центра фигуры
- Вычисление площади (через
operator double()) - Ввод/вывод фигур
- Работа с массивом фигур через класс
Array
Файл: main.cpp:10-43
Тестирование:
Тестирует конструкторы копирования/перемещения, операторы присваивания и операции с массивом.
Файл: test_main.cpp:9-109
Переработанная версия Lab 3 с использованием шаблонов для обобщения типов координат.
Базовый шаблонный класс: Figure.h:1-31
Использование: main.cpp:10-54
Тестирование:
Аналогично Lab 3, но с шаблонными типами.
Файл: test_main.cpp:9-109
Реализация собственного менеджера памяти и структуры данных Stack с использованием PMR (Polymorphic Memory Resources).
Файлы:
- Кастомный аллокатор:
custom_memory_resource.h:9-56 - Stack с итераторами:
stack.h:6-89 - Пример использования:
main.cpp:11-40
Тестирование:
Покрывает базовые операции стека, работу с сложными типами, поведение пустого стека и итераторы.
Файл: test_main.cpp:14-80
Реализация игровой системы с NPC (Orc, Bear, Squirrel) с использованием паттерна Visitor для боевой системы.
Базовый класс: NPC.h:1-26
Основная функциональность:
- Создание NPC через фабрику (
NPCFactory) - Боевая система через
BattleVisitor - Сохранение/загрузка через
FileManager - Логирование в консоль и файл
Использование: main.cpp:17-107
Тестирование:
Тестирует фабрику NPC, боевую систему и сохранение/загрузку.
Файл: test_main.cpp:6-43
Расширение Lab 6 с добавлением многопоточности для одновременного перемещения NPC и ведения боев.
Основные функции:
- Многопоточная функция:
func.h:122-194 - Функция перемещения NPC:
func.h:43-71 - Визуализация карты:
func.h:19-41
Использование: main.cpp:8-13
Тестирование:
Тестирует создание 50 NPC, проверку позиций и многопоточные бои.
Файл: test_main.cpp:7-62
- Язык программирования: C++ (современные стандарты:
auto,unique_ptr,shared_ptr, move-семантика) - Система сборки: CMake (компиляция через CMake Tools в VSCode)
- Фреймворк тестирования: Google Test
Паттерны и технологии:
- Шаблоны (templates)
- Полиморфизм и виртуальные функции
- RAII и умные указатели
- PMR (Polymorphic Memory Resources)
- Паттерн Visitor
- Паттерн Factory
- Многопоточность (
std::thread,std::mutex,std::condition_variable)
Каждая лабораторная работа (кроме Lab 6, где тесты находятся в отдельной папке test/) содержит файл test_main.cpp в корне директории лабораторной.
Все тесты используют Google Test и покрывают:
- Конструкторы (обычные, копирования, перемещения)
- Операторы присваивания
- Основную функциональность классов
- Граничные случаи
Архитектура проекта:
- Проект демонстрирует прогрессивное изучение концепций ООП — от простых функций до сложных многопоточных систем.
- Отсутствие папки
.vscodeподтверждено — все настройки VSCode хранились локально. - Компиляция выполнялась через CMake Tools в VSCode (наличие папки
CMakeFiles/). - Структура каждой лабораторной стандартизирована:
src/— исходный кодtest_main.cpp— тесты
- В Lab 6 тесты вынесены в отдельную папку
test/.
Эволюция кода:
- Lab 1–2: Базовые концепции и работа с классами
- Lab 3–4: Полиморфизм и шаблоны
- Lab 5: Управление памятью и PMR
- Lab 6–7: Паттерны проектирования и многопоточность