Обучение языку C++, часть 1

Санкт-Петербург, осень 2013

Описание

Программа ориентирована на студентов, имеющих хотя бы небольшой опыт процедурного программирования, предпочтительно на языке со строгой типизацией.

Курс демонстрирует основные средства языка С++, а также наиболее популярных его библиотек. Большое внимание уделяется сложным моментам, незнание которых часто приводит к опасениям при использовании С++: работа с памятью, оптимальность при вызове функций, работа с исключениями и т.д. В дополнении слушателям демонстрируются последние нововведения языка, зафиксированные в стандарте С++11, призванные значительно упростить разработку.

Список книг, помогающих осваивать С++ можно найти тут: http://alenacpp.blogspot.ru/2006/09/c.html

Предварительный курс, осень 2013

  1. Организация разработки программ
  2. Компоновка
  3. Работа с памятью
  4. Объявления; встроенные типы данных; типы данных, определяемые пользователем
  5. Функции
  6. Классы
  7. Умные указатели
  8. Введение в STL
  9. Препроцессор. R-value reference
  10. Полиморфизм
  11. Обработка ошибок
  12. Создание библиотек

Осенью 2013 года видеозапись лекций курса не ведётся, по ссылке можно найти лекции 2011 года. Обратите внимание, что преподаватель сменился, поэтому прочтения могут существенно отличаться.

Преподаватели

Список лекций

Организация разработки программ
  • Историческая справка
  • Язык программирование и сопутствующие инструменты:
    • библиотеки (стандартные и не очень, в т.ч. для работы с ОС)
    • компиляторы (+компоновщик)
    • среды разработки / автоматические системы сборки (make, cmake, auto tools, ...)
    • системы контроля версий
    • тестирование (различные этапы)
  • Простейшие языковые конструкции (объявление переменной, инструкции, функции, классы)
  • Простейший ввод вывод (C-style)
  • Hello, World!
  • Рекомендации по компиляции
Компоновка
  • Раздельная компиляция, единицы трансляции
  • Заголовочные файлы и стражи включения
  • Объявления/определения, ODR
  • Модульность: пространства имен, using
  • Внутренняя и внешняя линковка (static, const, inline, anonymous namespace...)
  • Precompiled headers
Работа с памятью, выполнение программ
  • Адресное пространство процесса, страничная память
  • Загрузка программы, основной поток
  • Сегмент данных, сегмент кода, куча, стек
  • Указатели, ссылки, массивы, константность
  • Выделение/освобождение памяти
  • Пара слов про умные указатели
Объявления; встроенные типы данных; типы данных, определяемые пользователем
  • Встроенные типы данных (интегральные, floating point); символы и строки; специальные (void)
  • Типы данных, определяемые пользователем (структуры)
  • Null terminated strings
  • Приведение типов
  • Объявления и область видимости
  • Выражения и операции
  • Инструкции (ветвление, циклы)
Функции
  • Объявления/определения
  • Передача параметров
  • Возвращаемые значения (анонс rvalue reference)
  • Перегрузка, поиск, ADL
  • Разбор вызова функции (assembler), calling conventions
Классы
  • Инкапсуляция
  • Типы классов
  • Специальные функции (конструкторы, деструкторы, операторы)
  • Предназначение различных видов функций-членов
  • Константность
  • Размещение объектов
  • Переопределение операторов, преобразование типов (в т.ч. explicit)
Пространства имен. Операторы.
  • Именованные пространства имен.
  • Поиск Кёнига
  • Правила перегрузки операторов
  • Преобразование типов
  • Friend функции
  • Функторы
Динамический полиморфизм. Часть 1.
  • Наследование
  • Виртуальные функции и vtable
  • Абстрактные классы
Динамический полиморфизм. Часть 2
  • Множественное наследование
  • RTTI
Введение в шаблоны
  • Шаблоны классов
  • Шаблоны функций
  • Специализация
Шаблоны. Часть 2

Шаблоны: * специализация * взаимодействие с наследованием

В качестве примера шаблонов рассматриваются умные указатели.