We use cookies in order to improve the quality and usability of the HSE website. More information about the use of cookies is available here, and the regulations on processing personal data can be found here. By continuing to use the site, you hereby confirm that you have been informed of the use of cookies by the HSE website and agree with our rules for processing personal data. You may disable cookies in your browser settings.

  • A
  • A
  • A
  • ABC
  • ABC
  • ABC
  • А
  • А
  • А
  • А
  • А
Regular version of the site

Advanced C++

2023/2024
Academic Year
RUS
Instruction in Russian
9
ECTS credits
Course type:
Compulsory course
When:
1 year, 2-4 module

Instructors


Голубев Иван Анатольевич


Линский Евгений Михайлович

Программа дисциплины

Аннотация

Конструкции языка 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
  • Дополнительные разделы
Элементы контроля

Элементы контроля

  • неблокирующий летучки
  • неблокирующий тесты
  • блокирует часть оценки/расчета экзамен
  • неблокирующий лабораторные
    лабораторные работы с частичной автопроверкой
  • неблокирующий итоговый экзамен
Промежуточная аттестация

Промежуточная аттестация

  • 2023/2024 2nd module
    0.3 * лабораторные + 0.1 * летучки + 0.2 * тесты + 0.4 * экзамен
  • 2023/2024 4th module
    0.4 * итоговый экзамен + 0.15 * лабораторные + 0.15 * лабораторные + 0.05 * летучки + 0.05 * летучки + 0.1 * тесты + 0.1 * тесты
Список литературы

Список литературы

Рекомендуемая основная литература

  • 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

Авторы

  • Башун Владимир Владимирович