Программирование на языке C++. Базовый поток 2026
1. О курсе
Цель курса – формирование у студентов системных знаний и практических навыков разработки программ на языке C++, освоение процедурного, объектно-ориентированного и обобщенного программирования, а также современных возможностей стандарта C++.
Задачи курса:
- изучение синтаксиса и основных конструкций языка C++;
- освоение принципов модульного программирования;
- приобретение навыков работы с указателями, ссылками и динамической памятью;
- изучение объектно-ориентированного программирования;
- освоение шаблонов и стандартной библиотеки C++;
- изучение механизмов управления ресурсами, обработки исключений и семантики перемещения;
В результате освоения курса студент должен:
Знать:
- основные конструкции языка C++;
- фундаментальные типы данных и операции над ними;
- принципы объектно-ориентированного и обобщенного программирования;
- механизмы управления памятью и временем жизни объектов;
- основные контейнеры и алгоритмы стандартной библиотеки C++;
Уметь:
- разрабатывать программы на языке C++;
- использовать модульную организацию программ;
- создавать собственные классы и шаблоны;
- применять стандартную библиотеку C++;
- разрабатывать безопасные и эффективные программы с использованием современных средств языка.
2. Программа курса
| Неделя | Лекция | Семинар |
|---|---|---|
| 1 | Введение в язык C++. Состав языка. Структура программы. Типы данных. Переменные. Операции. Выражения. | Среда разработки. Компиляция программ. Простые программы. Ввод и вывод данных. Решение задач с использованием основных типов данных и операций. |
| 2 | Управляющие конструкции: условные операторы, циклы, операторы перехода. | Решение задач с использованием ветвлений и циклов. Отладка программ. |
| 3 | Указатели и ссылки. Арифметика указателей. Массивы. Динамическая память. Строки в стиле C. | Работа с указателями и массивами. Динамическое выделение памяти. Обработка строк. |
| 4 | Функции. Передача параметров. Перегрузка функций. Рекурсия. Модульное программирование. Пространства имен. | Разработка программ с использованием функций. Рекурсивные алгоритмы. Организация проектов из нескольких файлов. |
| 5 | Пользовательские типы данных. Перечисления, структуры, объединения. Основы объектно-ориентированного программирования. | Создание структур и простейших классов. Практика разработки пользовательских типов данных. |
| 6 | Классы и объекты. Конструкторы. Инкапсуляция. Статические и константные члены класса. Псевдонимы типов. | Разработка классов. Реализация конструкторов и методов. Работа со статическими и константными членами. |
| 7 | Шаблоны функций и классов. Вывод типов. Специализация шаблонов. Перегрузка операций. Лямбда-выражения. | Создание шаблонных функций и классов. Перегрузка операций. Использование лямбда-выражений. |
| 8 | Управление ресурсами. RAII. Конструкторы копирования. Оператор присваивания. Деструкторы. Правило трёх. | Реализация классов с динамической памятью. Copy&Swap. Анализ ошибок управления памятью. |
| 9 | Семантика перемещения. rvalue-ссылки. Конструктор перемещения. Правило пяти. std::move. | Реализация поддержки перемещения. Оптимизация производительности классов. |
| 10 | Наследование. Полиморфизм. Виртуальные функции. Абстрактные классы. Приведение типов. | Создание иерархий классов. Использование виртуальных функций и полиморфизма. |
| 11 | Исключения. noexcept. Безопасность исключений. Исключения в конструкторах и деструкторах. | Обработка исключительных ситуаций. Проектирование надёжных программ. |
| 12 | Стандартная библиотека C++. Умные указатели. Последовательные контейнеры. Итераторы. | Использование vector, array, list, deque. Работа с итераторами и умными указателями. |
| 13 | Ассоциативные контейнеры: map, set, unordered-контейнеры. Structured bindings. | Решение задач с использованием контейнеров STL. Выбор структуры данных. |
| 14 | Метапрограммирование. constexpr, consteval, constinit. Variadic templates. decltype. Concepts и requires. | Практика использования constexpr, шаблонов с переменным числом параметров и Concepts. |
| 15 | Ranges и современные возможности C++20. Итоговое повторение курса. Подготовка к экзамену. | Комплексное решение задач. Разбор типовых экзаменационных заданий. Консультация перед итоговой аттестацией. |
4. Команда курса
Руководитель курса: Ибрагимов Булат Ленарович Лектор: Бердашкевич Роман Евгеньевич Семинаристы: Погадаев Никита Максимович Б05-605 Криворотов Данила Александрович Б05-606, Б05-616
Ассистенты: Беляков Глеб Михайлович Корниенко Сергей Михайлович, Жиганов Глеб Александрович Молчанов Илья Николаевич
5. Материалы курса
Программу экзамена можно посмотреть здесь здесь.