Учебный курс по программированию на C++ (стандарт C++23): от первой программы до ООП, STL, умных указателей и RTTI. Каждый урок — отдельная папка с кратким конспектом и рабочими примерами кода.
Курс рассчитан на студентов, знакомых с основами программирования (переменные, циклы, ветвления). Опыт C++ не требуется.
| № | Тема | Конспект | Примеры |
|---|---|---|---|
| 1 | Введение. Первая программа. Ввод-вывод. Память и типы данных | README | код |
| 2 | Память и типы данных. IEEE 754. Битовые операции | README | код |
| 3 | Условия, switch, циклы while / for, break, continue |
README | код |
| 4 | Функции. Рекурсия. Перегрузка | README | код |
| 5 | Введение в указатели. Арифметика указателей | README | код |
| 6 | Висячие указатели, утечки. Ссылки. Умные указатели (кратко) | README | код |
| 7 | Массивы. Статические и динамические. Связь с указателями | README | код |
| 8 | Двумерные массивы. Строки. Файлы | README | код |
| 9 | Структуры. Введение в ООП | README | код |
| 10 | Контрольная работа (демо-разбор) | README | код |
| 11 | Классы: конструкторы, деструкторы, перегрузка операций | README | код |
| 12 | Передача объектов в функции. Коллекции. Перегрузка операций | README | код |
| 13 | Исключения. RAII. Правило трёх (пяти) | README | код |
| 14 | Умные указатели: unique_ptr, shared_ptr, weak_ptr |
README | код |
| 15 | Move-семантика. std::move, rvalue-ссылки |
README | код |
| № | Тема | Конспект | Примеры |
|---|---|---|---|
| 16 | Контейнеры последовательные: vector, deque, list |
README | код |
| 17 | Контейнеры последовательные: практика | README | код |
| 18 | Ассоциативные контейнеры: map, set, unordered_map |
README | код |
| 19 | Алгоритмы STL: sort, find, ranges, лямбды |
README | код |
| 20 | Разбор демо контрольной работы | README | код |
| 21 | Наследование: базовое | README | код |
| 22 | Наследование: практика, RTTI, static_cast / dynamic_cast |
README | код |
| 23 | Подготовка к коллоквиуму | README | код |
| 24 | Подготовка к коллоквиуму (продолжение) | README | код |
| 25 | Абстрактные классы, чистые виртуальные функции | README | код |
| 26 | Абстрактные классы: практика, интерфейсы | README | код |
| 27 | RTTI, виды кастов: полная картина | README | код |
| 28 | Разбор демо экзамена | README | код |
| Тема | Конспект |
|---|---|
| Бонус. Типичные вопросы коллоквиума с краткими ответами | README |
| Краткий справочник для подготовки к экзамену | EXAM_GUIDE.md |
Курс рассчитан на C++23 и компилятор GCC 13+ или Clang 16+. Сборка — через CMake (3.20+).
Fedora Linux:
sudo dnf install gcc-c++ cmake ninja-buildПроверка:
g++ --version # ожидается GCC 13+ (рекомендуется 14+)
cmake --version # ожидается 3.20+Ubuntu / Debian:
sudo apt install g++ cmake ninja-buildДля C++23 нужен GCC 13+ (на Ubuntu 22.04 — из PPA или обновление до 24.04; на Debian 12 — из backports).
Windows: MSYS2 с GCC 13+ (https://www.msys2.org)
или Visual Studio 2022 с /std:c++latest.
CLion (https://www.jetbrains.com/clion/) — открывает корневой
CMakeLists.txt как проект, показывает все цели в выпадающем списке.
mkdir build && cd build
cmake ..
cmake --build .
./lesson-01-intro/helloИли через CLion: выбрать цель → Run (Shift+F10) или Debug (Shift+F9).
cpp-university/
├── CMakeLists.txt корневой, подключает все уроки
├── README.md
├── LICENSE
├── .gitignore
├── lesson-01-intro/
│ ├── CMakeLists.txt цели для примеров урока
│ ├── README.md
│ └── *.cpp
├── lesson-02-memory-types/
│ ├── CMakeLists.txt
│ ├── README.md
│ └── *.cpp
├── ...
└── bonus-colloquium-questions/
└── README.md
В каждой папке урока:
CMakeLists.txt— списокadd_executableдля примеров.README.md— конспект: цель, ключевые понятия, примеры.*.cpp— рабочие примеры кода с комментариями.
- Читаем
README.mdурока. - Открываем примеры
*.cpp. - В CLion выбираем нужную цель и запускаем (Shift+F10).
- Меняем, экспериментируем.
- Переходим к следующему уроку.
Курс сохраняет структуру исходной программы (28 уроков, два модуля), с небольшими правками:
- Стандарт обновлён до C++23. Современные вузовские программы переходят на C++20/C++23, и курс это отражает.
- Урок 15 — добавлена тема move-семантика (не было в исходной программе, но критично для современного C++).
- Урок 19 — добавлена тема алгоритмы STL (
sort,find, ranges, лямбды). В исходной программе были только контейнеры. - Урок 22 — RTTI и касты перенесены ближе к наследованию. В исходной программе они стояли в уроке 27.
- Урок 27 — оставлен как обобщающий по кастам.
- Бонусный урок — вопросы коллоквиума с ответами.
По мере уместности в примерах вводятся современные возможности:
| Возможность | Стандарт | Где |
|---|---|---|
std::print / std::println |
C++23 | уроки 1+, местами |
std::format |
C++20 | уроки 1+ |
std::span |
C++20 | уроки 7+ |
| Concepts | C++20 | шаблоны, уроки 4, 6 |
| Ranges | C++20 | урок 19 |
std::expected |
C++23 | урок 13 (исключения) |
std::string::contains |
C++23 | урок 8 |
std::to_underlying |
C++23 | урок 9 (enum) |
std::stacktrace |
C++23 | уроки 13, 27 |
Базовые примеры при этом остаются простыми и читаемыми — std::cout
и классический синтаксис не отменяются.
- Базовые знания любого языка программирования (переменные, условия, циклы).
- C++23-совместимый компилятор (GCC 13+, Clang 16+, MSVC 2022+).
- CMake 3.20+.
- 2–4 часа в неделю на прохождение одного урока.
MIT