Программирование на языке C++. Основной поток 2026

Материал из Public ATP Wiki
Версия от 14:08, 19 июня 2026; Spirina.es (обсуждение | вклад) (Осенний семестр)
Перейти к: навигация, поиск

О курсе

Первый (осенний) семестр предназначен для начинающих разработчиков на C++.

Второй (весенний) семестр даёт углублённое понимание тонкостей языка и раскрывает особенности возможностей новых стандартов. Подойдёт как для тех, у кого C++ является первым опытом программирования, так и для тех, кто переходит на C++ с других языков.

Важной особенностью курса является то, что упор делается на большое количество практики, код-ревью и устные сдачи. Данный подход позволяет выстроить сильный фундамент для дальнейшего профессионального развития как C++-разработчика, так и в любой другой IT-специальности.

Команда курса

Руководитель курса и лектор: Попов Павел Александрович Семинаристы:

    • Барсуков Сергей Евгеньевич
    • Драгун Константин Юрьевич
    • Гарбузов Николай Алексеевич
    • Русецкий Дмитрий Сергеевич
    • Вашкевич Егор Сергеевич
    • Лунга Артём Романович
    • Погадаев Никита Максимович

Ассистенты:

    • Информация будет опубликована позднее.

Программа курса

Формы контроля

Осенний семестр — дифференцированный зачёт. Весенний семестр — экзамен.

Осенний семестр

Неделя Тема Задачи
1 Введение. Простейшая программа. Объявления и определения, области видимости.
2 Основные типы и операции над ними. Выражения и операторы.
3 Control statements. Compile-time errors, runtime errors. Undefined behavior и unspecified behavior.
4 Указатели. Виды памяти.
5 Динамическая память. Массивы. Указатели на функции.
6 Ссылки. Константы. Константные указатели и ссылки.
7 Приведения типов. Классы и структуры. Модификаторы доступа.
8 Конструкторы и деструкторы. Оператор присваивания. Правило трёх.
9 Перегрузка операторов. Const-, static-, explicit-методы. Указатели на члены.
10 Наследование и его виды. Видимость и доступность методов при наследовании. Конструкторы и деструкторы при наследовании.
11 Приведения типов при наследовании. Множественное наследование. Виртуальные функции и полиморфные типы.
12 Абстрактные классы. Pure virtual функции. RTTI и dynamic_cast. Таблицы виртуальных функций.
13 Виртуальные функции (продолжение). Шаблоны. Перегрузка и специализация шаблонов.
14 Вычисления на шаблонах. Метафункции. Зависимые имена.
15 Вариативные шаблоны. Исключения. Идиома RAII.

Весенний семестр

Лекция Тема

16 Исключения в конструкторах и деструкторах. noexcept. Exception-safety. - 17 Контейнеры. Внутреннее устройство vector и deque. - 18 Устройство deque. Итераторы, виды итераторов, инвалидация итераторов. Внутреннее устройство list. - 19 Внутреннее устройство map. Классы string_view и span. Идея аллокаторов. - 20 Внутреннее устройство unordered_map. Allocator traits. Allocator-aware контейнеры. - 21 Выравнивания. Перегрузка new/delete. Идея move-семантики. Move-конструкторы и move-assignment операторы. - 22 Определения lvalue и rvalue. Rvalue-ссылки. Reference qualifiers. Perfect forwarding. Универсальные ссылки. std::forward. - 23 Реализация std::move и std::forward. xvalues, RVO, copy elision, temporary materialization. Функция move_if_noexcept. - 24 Вывод типов auto, decltype. CTAD, template deduction guides. Tuples, structured bindings, tuple-like types. - 25 unique_ptr, shared_ptr, weak_ptr, make_shared, enable_shared_from_this. Type erasure. std::any. - 26 Стирание типов в shared_ptr. Шаблонное метапрограммирование. Идиома SFINAE. Реализация is_class. Метафункция enable_if. - 27 Реализация has_method_construct, is_base_of. Спецификатор и оператор requires. Концепты. - 28 Лямбды. Замыкания. Списки захвата. Захват с инициализацией. Захват this. Обобщённые лямбды. - 29 Шаблонные лямбды. std::function, std::bind, std::reference_wrapper, std::invoke. Идея реализации std::function. - 30 Constexpr-переменные и функции. Compile-time вычисления.

Активности

На каждую задачу:

срок сдачи в контест — 3 недели (2 недели без штрафа); срок прохождения ревью — 4 недели с момента релиза задачи; устная сдача входит в ревью; на устную сдачу даётся ровно 3 попытки.

Задачи первого семестра

Неделя Задача

5–6 Stack - 7 String - 9 BigInteger - 10 Rational - 12 Geometry - 14 Matrix }

Задачи второго семестра

Неделя Задача

1 Residue - 3 Deque - 6 List and StackAllocator - 9 Unordered Map - 11 SharedPtr - 13 Tuple - 15 Function }

Коммуникация

Ссылка на чат курса в мессенджере (будет опубликована ближе к старту семестра).

Прогресс студентов

Ссылка на таблицу студентов с оценками (будет опубликована ближе к старту семестра).

Критерии оценивания и формы контроля успеваемости

Осенний семестр

Задачи

Итоговая оценка по задачам вычисляется по формуле:

Контрольная работа

Финальная контрольная работа является блокирующей. Даёт от 0 до 3 баллов. При результате ниже установленного порога зачёт считается не сданным и переходит в статус пересдачи.

Итоговая оценка

Складывается из:

до 7 баллов за задачи; до 3 баллов за контрольную работу; до 1 балла от семинариста.

Итоговая оценка округляется вниз.

Весенний семестр

Подсчёт баллов

Учитываются:

6 основных задач с коэффициентом; баллы за задачу Residue.

Коэффициенты:

Количество задач Коэффициент

1 ×1.0 - 2 ×1.1 - 3 ×1.2 - 4 ×1.3 - 5 ×1.4 - 6 ×1.5 }

Ограничения на оценки

Для оценки удовлетворительно:

1–2 задачи (без учёта Residue); 250–449 баллов.

Для оценки хорошо:

3–4 задачи (без учёта Residue); 450–749 баллов.

Для оценки отлично:

5–6 задач (без учёта Residue); 750+ баллов.

Перевод баллов в оценку:

Например:

740 баллов → 7; 755 баллов → 8.

Экзамен

На удовлетворительно:

2 билета уровня «уд».

На хорошо:

2 билета уровня «уд»; 2 билета уровня «хор».

На отлично:

2 билета уровня «хор»; 2 билета уровня «отл».

Возможность повышения оценки

2 задачи (без Residue) и более 500 баллов:

    • можно претендовать на оценку 5;
    • требуется дополнительно ответить 2 билета уровня «хор».

4 задачи (без Residue) и более 800 баллов:

    • можно претендовать на оценку 8;
    • требуется дополнительно ответить 2 билета уровня «отл».

Дополнительные льготы

При успешной сдаче 4–6 задач (без Residue) билеты на удовлетворительно отвечать не обязательно. При успешной сдаче 5–6 задач (без Residue) можно вытянуть 3 билета уровня «хор» и 3 билета уровня «отл», выбрав по 2 билета из каждого набора для ответа.

Пример расчёта

Сиксевенов Пабло Ильич решил:

Residue — 90 баллов; List — 180 баллов; Tuple — 200 баллов.

Подсчёт:

В этом случае студент может сдавать экзамен на оценку «удовлетворительно». При успешной сдаче билетов уровня «уд» он также может претендовать на оценку 5, поскольку набрал более 500 баллов.

Материалы курса

Видеолекции