Программирование на C++. Осенний семестр 2019
Лекции
1. ООП. Основы управления памятью
03.10.2019 презентация
2. ООП-продолжение. Полиморфизм. Friend. Const-correctness Пространства имен🔗
10.10.2019 презентация
3. Управление памятью. Аллокаторы. Умные указатели.
17.10.2019 презентация
4. Стандартная библиотека. STL. Functional. Exceptions🔗
24.10.2019 презентация
5. Шаблоны классов и функций. Специализация шаблона. Инстанцирование шаблона. SFINAE. Variadic templates.🔗
31.10.2019 презентация
6. Rvalue, lvalue. Move-семантика. Правила выведения типов в шаблонах, auto, decltype(auto)🔗
07.11.2019 презентация
7. Exception-safety. RAII. Basic, strong, nothrow guarantees.🔗
14.11.2019 презентация
8. OOP. Liskov substitution. Scott's solution. NVI🔗
21.11.2019 презентация
9. Exception-safety-2. Uncaught exception/exceptions. ScopeGuard idiom. SCOPE_EXIT, SCOPE_FAIL, SCOPE_SUCCESS🔗
05.12.2019 презентация
10. Undefined behavior🔗
12.12.2019 презентация
11. Многопоточность
19.12.2019 презентация
Практика (CATS)🔗
Все уже открытые контесты можно найти здесь
Списком:
Дедлайны по контестам совпадают с временем конца контеста. При отправке решения после дедлайна вы получаете за задачу 25% баллов.
Ваши решения будут проверяться линтером на соответствие Google Style Guide. В случае несоответствия вы будете получать вердикт LI. Код линтера можно найти здесь.
Ваш код будет компилироваться компилятором g++
версии 7.2 с флагами -fsanitize=address -g -Wall -Werror
. Чтобы проверить ваш код локально, нужно компилировать его с этими флагами. В случае падения из-за санитайзера вы будете получать RE, а вывод санитайзера можно будет посмотреть в результатах теста.
Практика
Полезные ссылки
Для юнит-тестирования предлагается использовать Catch
Покрытие: lcov
HW 1🔗
Дедлайн
У всех заданий жесткий дедлайн -- после дедлайна досдавать нельзя.
У групп с практикой в четверг -- 24.10.2019 сразу после конца пары
У групп с практикой в субботу -- 26.10.2019 сразу после конца пары
Задание
Реализовать интерфейс требуемых классов, написать юнит-тесты
Help🔗
- Constructors
- operator overloading
- access specifiers
Материалы с практических занятий
Алексей Щуров
Алексей Верхолат
HW 2🔗
Дедлайн
У всех заданий жесткий дедлайн -- после дедлайна досдавать нельзя.
У групп с практикой в четверг -- 28.11.2019 сразу после конца пары
У групп с практикой в субботу -- 30.11.2019 сразу после конца пары
Задание
Реализовать хеш-таблицу с открытой адресацией с использованием данного интерфейса
Следить за обновлением интерфейса здесь
Эту домашку требуется делать с использованием системы контроля версий и репозиторий на гитхабе, полученного здесь
HW 3🔗
Реализовать вариант Rogue-like игры. За ТЗ и исправлением в нем косяков следить здесь
Дедлайн в последний четверг и субботу декабря соответственно (26.12.2019 и 28.12.2019)
Эту домашку требуется делать с использованием системы контроля версий и репозиторий на гитхабе, полученного здесь
HW 4🔗
Реализовать Executor, ТЗ доступно в репозитории
Эту домашку требуется делать с использованием системы контроля версий и репозиторий на гитхабе, полученного здесь
Рейтинг
Видео лекции и презентации на русском языке
Доступны лекции разных семестров computer science center. Видео лекции есть не везде, нужно смотреть по значку видео, есть ли запись в данном семестре.
Курс computer science center. Первые части
Курс computer science center. Вторые части
Литература
https://en.cppreference.com/w/
Список вопросов на коллоквиум
- ООП в C++. Структуры и классы. Множественное наследование. Виртуальное наследование. Таблица виртуальных функций. Абстрактные классы. Liskov substitution. NVI
- Управление памятью в C++. Выравнивание полей структур. Битовые поля в структурах. Sizeof. Выделение памяти (operator new, placement new). new vs malloc. POD. Фрагментация памяти. Счетчик ссылок. Умные указатели. Аллокаторы
- Const correctness. Константные указатели, ссылки, методы, переменные, замыкания. Mutable. Стандартная библиотека C++. Ввод-вывод. Контейнеры. Типы контейнеров. Типы итераторов.
- Обработка исключений в c++. Модули стандартной библиотеки для работы с исключениями. Exception safety. RAII. Виды гарантий exception safety. Раскрутка стека. std::uncaught_exception (s). Исключения в многопоточном приложении C++.
- Шаблоны в C++. Вложенные шаблоны. Различия в шаблонах функций и классов. Инстанцирование шаблона. Специализация шаблона. SFINAE.
- Метапрограммирование. type_traits. Variadic templates. Списки типов. Tag dispatch (by instance, by type, на примере iterator_traits).
- Функции в C++. Способы передачи функции в качестве аргумента. Указатель на функцию. Функторы. std::function. Замыкания и анонимные функции в C++.
- Многопоточность в C++. Race condition. Способы синхронизации. Dead lock, live lock. Lock-free. Модуль atomic. Conditional variable. Future. Promise
- Правила выведения типов в C++. decltype, auto, decltype(auto). Универсальные ссылки. Move-семантика. Perfect forwarding. Реализация std::move, std::forward. Value categories.