Skip to content

DVDemon/mai_oop_examples_public

Repository files navigation

Примеры по объектно-ориентированному программированию на C++

Данный репозиторий содержит учебные примеры по изучению объектно-ориентированного программирования на языке C++. Примеры организованы по лекциям и демонстрируют различные аспекты языка C++.

Структура проекта

Лекции 0-1: Основы C++

  • 01_FirstCppProgram - Первая программа на C++
  • 02_StatementsAndFunctions - Операторы и функции
  • 03_DataInputAndOutput - Ввод и вывод данных
  • 04_OutputFormatting - Форматирование вывода
  • 05_VariableScope - Область видимости переменных
  • 06_GTest - Тестирование с Google Test
  • 07_IntegerModifiers - Модификаторы целых чисел
  • 08_FractionalNumbers - Дробные числа
  • 09_Booleans - Логические типы
  • 10_CharactersAndText - Символы и текст
  • 11_Auto - Автоматический вывод типов
  • 12_PrefixPostfixIncrementDecrement - Префиксные и постфиксные операции
  • 13_CompoundAssignmentOperators - Составные операторы присваивания
  • 14_LogicalOperators - Логические операторы
  • 15_NumericLimits - Числовые ограничения
  • 16_MathFunctions - Математические функции
  • 17_Constants - Константы
  • 18_ConstantExpressions - Константные выражения
  • 19_ImplicitDataConversions - Неявные преобразования типов
  • 20_ExplicitDataConversions - Явные преобразования типов
  • 21_IfStatements - Условные операторы
  • 22_Switch - Оператор выбора
  • 23_ForLoop - Цикл for
  • 24_ForLoopMultipleDeclarations - Множественные объявления в for
  • 25_CommaOperator - Оператор запятая
  • 26_RangeBasedForLoop - Цикл for на основе диапазона
  • 27_WhileLoop - Цикл while
  • 28_DoWhileLoop - Цикл do-while
  • 29_NestedLoops - Вложенные циклы
  • 30_BreakAndContinue - Операторы break и continue

Лекции 2-3: Функции и классы

  • Основы работы с функциями
  • Перегрузка функций
  • Введение в классы и объекты
  • Конструкторы и деструкторы

Лекции 4-5: Наследование и полиморфизм

  • Наследование классов
  • Виртуальные функции
  • Полиморфизм
  • Абстрактные классы

Лекции 6-7: Шаблоны и умные указатели

  • 01_SimpleTemplate - Простые шаблоны
  • 02_TwoArguments - Шаблоны с двумя параметрами
  • 03_ComplexParameters - Сложные параметры шаблонов
  • 04_Specialization - Специализация шаблонов
  • 05_PartialSpecialization - Частичная специализация
  • 06_Metafunction - Метафункции
  • 07_Factorial - Факториал на этапе компиляции
  • 08_Types - Работа с типами
  • 09_TypeTraits - Типовые свойства
  • 10_BuiltInConcepts - Встроенные концепты
  • 11_ConceptsExample1 - Примеры концептов
  • 12_ConceptsExample2 - Дополнительные примеры концептов
  • 13_CRTP - Curiously Recurring Template Pattern
  • 13_DeductionGuide - Руководства по выводу типов
  • 14_VariadicTemplate - Вариативные шаблоны
  • 15_UniquePointers - Уникальные указатели
  • 16_CustomUniquePointer - Пользовательский unique_ptr
  • 17_SharedPtr - Разделяемые указатели
  • 18_CustomShared - Пользовательский shared_ptr
  • 19_Dynamic_pointer_cast - Динамическое приведение указателей
  • 20_Enable_shared_from_this - Наследование от enable_shared_from_this
  • 21_Dead_lock - Взаимные блокировки
  • 22_Weak_ptr - Слабые указатели
  • 23_Weak_ptr_deadlock - Решение взаимных блокировок с weak_ptr
  • 24_MindBlow - Продвинутые возможности C++

Лекции 8-9: STL и контейнеры

  • 01_Vector - Демонстрация std::vector
  • 02_Iterator - Итераторы
  • 03_UniqueIterator - Уникальные итераторы
  • 04_BackInsert - Вставка в конец
  • 05_BackInsertIterator - Итератор вставки в конец
  • 06_IoStream - Потоки ввода-вывода
  • 07_ConstIterator - Константные итераторы
  • 08_Array - Статический массив
  • 09_Deque - Двусторонняя очередь
  • 10_Stack - Стек
  • 11_Queue - Очередь
  • 12_ForwardList - Односвязный список
  • 13_List - Двусвязный список
  • 14_Set - Множество
  • 15_Map - Ассоциативный массив
  • 16_Multiset - Мультимножество
  • 17_UnorderedSet - Неупорядоченное множество
  • 18_OperatorNew - Перегрузка оператора new
  • 19_Allocator - Аллокаторы
  • 20_SimpleAllocator - Простой аллокатор
  • 21_Polymorph - Полиморфизм
  • 22_ContainerWithPolymorph - Контейнеры с полиморфизмом

Лекции 10-15: Продвинутые темы

  • Многопоточность
  • Асинхронное программирование
  • Метапрограммирование
  • Оптимизация производительности

Ключевые примеры

01_Vector (Лекция 8-9)

Демонстрирует работу с std::vector:

  • Размещение объектов в памяти (стек vs куча)
  • Стратегия перераспределения памяти
  • Управление емкостью контейнера
  • Операции с итераторами
  • Инвалидация итераторов

22_Weak_ptr (Лекция 6-7)

Показывает использование слабых указателей:

  • Паттерн Observer с weak_ptr
  • Безопасный доступ к объектам
  • Предотвращение циклических ссылок
  • Управление жизненным циклом объектов

23_Weak_ptr_deadlock (Лекция 6-7)

Решение проблемы взаимных блокировок:

  • Использование weak_ptr для разрыва циклических зависимостей
  • Безопасное управление памятью
  • Предотвращение утечек памяти

24_MindBlow (Лекция 6-7)

Продвинутые возможности C++:

  • Variadic templates
  • Лямбда-функции
  • Функциональное программирование
  • Декартово произведение с помощью шаблонов

Требования

  • Компилятор C++17 или новее
  • CMake 3.10 или новее
  • Google Test (для тестов)

Сборка

mkdir build
cd build
cmake ..
make

Использование

Каждый пример можно запустить отдельно:

./build/examples/lection08_09/01_Vector/main
./build/examples/lection06_07/22_Weak_ptr/main
./build/examples/lection06_07/23_Weak_ptr_deadlock/main
./build/examples/lection06_07/24_MindBlow/main

Лицензия

Проект распространяется под лицензией MIT. См. файл LICENSE для подробностей.

About

Примеры для курса лекций по ООП

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published