2024/2025
Углубленный C++
Статус:
Маго-лего
Кто читает:
Департамент компьютерной инженерии
Когда читается:
2-4 модуль
Онлайн-часы:
30
Охват аудитории:
для своего кампуса
Язык:
русский
Кредиты:
9
Программа дисциплины
Аннотация
Конструкции языка C близко сопоставляются типичным машинным инструкциям, благодаря чему он традиционно является одним из основных языков системного программирования (в частности, на нем написана ОС Linux). Изучение приемов программирования на C позволяет не только научится писать эффективные программы, но и разобраться как работает компьютер при их выполнении. Язык C повлиял на синтаксис таких языков как C++, C#, Java и Objective-C. Знание С позволит лучше понять решения, принятые авторами этих языков, и оценить накладные расходы по времени и памяти при их использовании.Язык C++ является де-факто стандартом для написания высокопроизводительных программ. С одной стороны он позволяет эффективно использовать ресурсы компьютера, а с другой стороны --- позволяет писать программы с использованием наиболее популярных подходов современного программирования (процедурного, объектно-ориентированного, обобщенного, метапрограммирования и других).Целью курса является обучение написанию на C++ больших программ и библиотек, которые можно переиспользовать в других проектах. Особенностью курса является то, что очередной механизм языка рассматривается только после того, как слушатели смогут написать его сами.
Цель освоения дисциплины
- Читать и писать полезные программы на языке C
- Читать и писать программы на современном C++
- Детально понимать процесс построения программы из исходных кодов (gcc, make, cmake)
- Детально понимать процесс выполнения программы
- Использовать библиотеки
- Проектировать и реализовывать код, который можно использовать повторно
- Использовать все возможности библиотеки STL
Планируемые результаты обучения
- Понимание архитектуры компьютера
- Понимание процесса превращения программы в машинный код (компилятор, ассемблер, линковщик)
- Умение работать с указателями
- Понимание того, как устроен вызов функции
- Понимание карты памяти: стек и куча
- Умение использовать указатели на функции и интрузивные списки
- Знание стандартной библиотеки libc
- Умение работать с gcc, gdb, make, cmake, valgrind, sanitizers, perf
- Умение разработать утилиту командной строки под ОС Linux
- Понимание основных идей ООП
- Понимание особенностей ООП в C++ (конструктор копий, перегрузка операторов, move-семантика, множественное наследование)
- Понимание реализации ООП в C++ (vtable, this)
- Понимание реализации умных указателей
- Умение использовать ввод-вывод на С++
- Умение разрабатывать объектно-ориентированных программ на C++ (элементы проектирования на примере архитектуры MV, юнит тесты)
- Понимание способов обработки ошибок (errno, исключения)
- Умение использовать шаблоны
- Умение использовать метапрограммирование (ifdef, variadic templates, enable_if, concepts)
- Знание стандартных контейнеров STL
- Понимание концепции итераторов
- Знания стандартных алгоритмов в STL и особенностей их использования (функторы, ламбда)
- Умение использовать примитивы многопоточного программирования в STL (thread, mutex, conditional variables)
- Аллокаторы
- std::bind, std::function
- std::unique_ptr, std::shared_ptr
- Нововведения из последних стандартов: modules, parallel_algs, formats, filesystem
Содержание учебной дисциплины
- Отдельные главы языка C
- Объектно-ориентированное программирование на языке C++
- Разработка библиотек с помощью обобщенного программирования и метапрограммирования
- Обзор библиотеки STL
- Дополнительные разделы
Элементы контроля
- лабораторная str
- лабораторная mergesort
- лабораторная intrusive
- лабораторная C io
- летучка 1
- летучка 2
- летучка 3
- тест 1
- тест 2
- экзамен 2 модуль
- тест 3
- тест 4
- тест 5
- летучки 3 модуль
- лабораторная s vector
- лабораторная 7 matrix
- лабораторная 8 L2 sh_ptr
- лабораторная 9 figures
- лабораторная 10 с++ io/t-io
- домашнее задание 1 bmp
- летучки 4 модуль
- лабораторная работа 11 vector
- лабораторная работа 12 excpt
- Домашнее задание 2 K2:M2 Huffman
- экзамен 4 модуль
Промежуточная аттестация
- 2024/2025 2nd module0.08 * лабораторная C io + 0.08 * лабораторная intrusive + 0.08 * лабораторная mergesort + 0.08 * лабораторная str + 0.005 * летучка 1 + 0.005 * летучка 2 + 0.01 * летучка 3 + 0.08 * тест 1 + 0.08 * тест 2 + 0.5 * экзамен 2 модуль
- 2024/2025 4th module0.1 * Домашнее задание 2 K2:M2 Huffman + 0.1 * домашнее задание 1 bmp + 0.05 * лабораторная s vector + 0.05 * лабораторная 10 с++ io/t-io + 0.05 * лабораторная 7 matrix + 0.05 * лабораторная 8 L2 sh_ptr + 0.05 * лабораторная 9 figures + 0.05 * лабораторная работа 11 vector + 0.05 * лабораторная работа 12 excpt + 0.05 * летучки 3 модуль + 0.05 * летучки 4 модуль + 0.05 * тест 3 + 0.05 * тест 4 + 0.05 * тест 5 + 0.2 * экзамен 4 модуль
Список литературы
Рекомендуемая основная литература
- C++ programming : program design including data structures, Malik, D. S., 2009
- Алгоритмы на С++ : анализ структуры данных, сортировка, поиск, алгоритмы на графах, Седжвик, Р., 2014
- Дизайн и эволюция C++, Страуструп, Б., 2014
- С++ : полное руководство: классическое издание, Шилдт, Г., 2018
- Шаблоны C++. Справочник разработчика, Вандевурд, Д., 2020
- Язык программирования C++: Базовый курс, Липпман, С. Б., 2014
Рекомендуемая дополнительная литература
- C++17 STL. Стандартная библиотека шаблонов, Галовиц, Я., 2019
- С++ для "чайников", Дэвис, С. Р., 2004
- Язык программирования С, Керниган, Б., 2015