Данный репозиторий содержит учебные примеры по изучению объектно-ориентированного программирования на языке C++. Примеры организованы по лекциям и демонстрируют различные аспекты языка 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
- Основы работы с функциями
- Перегрузка функций
- Введение в классы и объекты
- Конструкторы и деструкторы
- Наследование классов
- Виртуальные функции
- Полиморфизм
- Абстрактные классы
- 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++
- 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 - Контейнеры с полиморфизмом
- Многопоточность
- Асинхронное программирование
- Метапрограммирование
- Оптимизация производительности
Демонстрирует работу с std::vector:
- Размещение объектов в памяти (стек vs куча)
- Стратегия перераспределения памяти
- Управление емкостью контейнера
- Операции с итераторами
- Инвалидация итераторов
Показывает использование слабых указателей:
- Паттерн Observer с
weak_ptr - Безопасный доступ к объектам
- Предотвращение циклических ссылок
- Управление жизненным циклом объектов
Решение проблемы взаимных блокировок:
- Использование
weak_ptrдля разрыва циклических зависимостей - Безопасное управление памятью
- Предотвращение утечек памяти
Продвинутые возможности 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 для подробностей.