Материал из Public ATP Wiki
Общие сведения
- Семестр: 1 (первый курс курс)
- Форма контроля: дифференцированный зачет
Важные ссылки
- Регистрация на курс (доступ для физтех-аккаунтов)
- Материалы курсa (доступ для физтех-аккаунтов)
- Чат курса
- Таблица с оценками
Требования
- Физтех-почта (домен phystech.edu)
- Аккаунт на GitHub
- Ноутбук на занятиях
План курса
№
|
Введение
|
1 |
Общие слова и немного истории
|
2 |
Знакомство с компилятором, первая программа
|
3 |
Основные типы и операции над ними
|
4 |
Объявления, определения и области видимости
|
5 |
Выражения (expressions) и операторы
|
6 |
Управляющие инструкции (control statements)
|
7 |
Ошибки компиляции, ошибки времени выполнения и UB
|
№
|
Модификаторы типов
|
1 |
Указатели
|
2 |
Виды памяти
|
3 |
Массивы
|
4 |
Функции
|
5 |
Ссылки
|
6 |
Константы
|
7 |
Приведения типов
|
№
|
Основы ООП. Инкапсуляция
|
1 |
Классы и структуры
|
2 |
Модификаторы доступа, инкапсуляция
|
3 |
Конструкторы и деструкторы
|
4 |
Правило трех
|
5 |
Перегрузка операторов
|
6 |
Константные методы
|
7 |
Статические поля и методы
|
8 |
Пользовательские приведения типов
|
9 |
Указатели на члены
|
10 |
Перечисления (енумы)
|
№
|
Наследование
|
1 |
Приватное, публичное и защищенное наследование
|
2 |
Видимость и доступность членов класса при наследовании
|
3 |
Размещение объектов в памяти и порядок вызова конструкторов при наследовании
|
4 |
Приведения типов при наследовании
|
5 |
Множественное наследование
|
6 |
Виртуальное наследование
|
№
|
Шаблоны
|
1 |
Идея шаблонов и простые примеры
|
2 |
Перегрузка шаблонных функций
|
3 |
Специализации шаблонов
|
4 |
Нетиповые параметры шаблонов
|
5 |
Простейшие compile-time вычисления
|
6 |
Зависимые имена
|
7 |
Простейшие метафункции и type_traits
|
8 |
Шаблоны с переменным количеством аргументов (variadic templates)
|
№
|
Полиморфизм и виртуальные функции
|
1 |
Идея полиморфизма и виртуальных функций
|
2 |
Более сложные примеры с виртуальными функциями
|
3 |
Абстрактные классы и чисто виртуальные функции
|
4 |
Виртуальный деструктор
|
5 |
RTTI и dynamic_cast
|
6 |
Реализация механизма виртуальных функций
|
7 |
Виртуальные функции при множественном наследовании
|
8 |
Некоторые нюансы, связанные с виртуальными функциями
|
№
|
Исключения
|
1 |
Идея и базовые примеры использования исключений
|
2 |
Разница между RE и исключениями
|
3 |
Более подробно о механизме бросания и ловли исключений
|
4 |
Идиома RAII, исключения в конструкторах и деструкторах
|
5 |
Безопасность относительно исключений, спецификации исключений
|
№
|
Контейнеры и итераторы
|
1 |
Понятие контейнера, обзор контейнеров
|
2 |
Понятие итератора, виды итераторов
|
3 |
Реализация и правильное использование итераторов
|
4 |
Output-итераторы и итераторы над потоками
|
5 |
Внутреннее устройство std::vector
|
6 |
Внутреннее устройство std::deque
|
7 |
Внутреннее устройство std::list
|
8 |
Внутреннее устройство std::map
|
9 |
Внутреннее устройство std::unordered_map
|
№
|
Аллокаторы и управление памятью
|
1 |
Идея и базовое применение аллокаторов
|
2 |
Примеры нестандартных аллокаторов, понятие allocator-awareness
|
3 |
Структура allocator_traits
|
4 |
Перегрузка операторов new и delete
|
5 |
Выравнивания и битовые поля
|
6 |
Scoped-аллокаторы
|
7 |
Полиморфные аллокаторы
|
№
|
Move-семантика и rvalue-ссылки
|
1 |
Мотивировка move-семантики и волшебная функция std::move
|
2 |
Move-конструкторы и move-assignment операторы
|
3 |
Реализация функции std::move
|
4 |
Формальное определение lvalue и rvalue
|
5 |
Особенности rvalue-ссылок
|
6 |
Проблема perfect forwarding
|
7 |
Реализация функции std::forward
|
8 |
Expired values (xvalues), RVO и copy elision
|
9 |
Функция move_if_noexcept
|
№
|
Вывод типов
|
1 |
Ключевое слово auto
|
2 |
Ключевое слово decltype и конструкция decltype(auto)
|
3 |
Class template argument deduction (CTAD)
|
4 |
Structured bindings
|
№
|
Умные указатели
|
1 |
Класс std::unique_ptr
|
2 |
Класс std::shared_ptr
|
3 |
Функции make_unique и make_shared
|
4 |
Класс std::weak_ptr
|
5 |
Проблема нестандартного аллокатора и удалителя в shared_ptr
|
6 |
Структура enable_shared_from_this и паттерн CRTP
|
№
|
Лямбда-функции
|
1 |
Идея и базовое использование лямбда-функций
|
2 |
Списки захвата в лямбда-функциях
|
3 |
Лямбда-функции как функциональные объекты
|
4 |
Класс std::function
|
№
|
Стирание типов, юнионы
|
1 |
Идиома type erasure и класс std::any
|
2 |
Решение проблемы с нестандартным deleter’ом для shared_ptr
|
3 |
Юнионы
|
4 |
Small objects optimization и empty base optimization
|
5 |
Реализация std::function
|
6 |
Класс std::variant и его реализация
|
7 |
Функция std::launder
|
№
|
Шаблонное метапрограммирование, SFINAE и концепты
|
1 |
Основные примитивы шаблонного метапрограммирования
|
2 |
Идиома SFINAE и структура std::enable_if
|
3 |
Метафункции для проверки наличия методов в классе
|
4 |
Реализация move_if_noexcept
|
5 |
Реализация is_base_of
|
6 |
Реализация common_type
|
7 |
Ограничения, ключевое слово requires
|
8 |
Концепты
|
№
|
Compile-time вычисления
|
1 |
Constexpr-функции и переменные
|
2 |
Новые возможности constexpr в C++20
|
3 |
Consteval и constinit
|
4 |
Метаконтейнер typelist
|
5 |
Реализация qiucksort для метаконтейнера
|
Оценивание
Оценка по курсу состоит из нескольких частей:
- Тесты
- Контесты
- Практические проекты
- Лабораторная работа
Тесты
- Небольшие тесты на 10 минут в начале каждого занятия
- Вопросы по материалам прошлого занятия
- Для прохождения нужен phystech.edu-аккаунт
- За каждый тест - 10 баллов.
Контесты
- Набор задач с автоматической проверкой тестирующей системой Я.Контест (нужен phystech.edu-аккаунт)
- Всего 6 тестов - после каждой темы базового блока
- Срок решения - 2 недели
- За каждый контест - 10 баллов
- Списывание детектируется и наказуемо!
Практические проекты
- 2 проекта - консольное приложение (после ООП) и серверное приложение (после Сети-2)
- Работа над кодом в несколько итераций на GitHub (нужен аккаунт)
- Срок работы - 2 недели + 1 неделя на каждую следующую итерацию
- Список тем проектов будет позднее
- Оценка за проект: зачет / незачет + до 2 доп. баллов (wow-эффект)
Лабораторная работа
- Анализ данных с помощью Pandas и Matplotlib
- Выдается после “Инструменты визуализации”
- Срок работы - 2 недели
- Оценка - 10 баллов
- Является блокирующей! Для получения зачета за курс необходимо набрать хотя бы 1 балл
Команда курса