Обучение языку C++, часть 1
Санкт-Петербург, осень 2013
Описание
Программа ориентирована на студентов, имеющих хотя бы небольшой опыт процедурного программирования, предпочтительно на языке со строгой типизацией.
Курс демонстрирует основные средства языка С++, а также наиболее популярных его библиотек. Большое внимание уделяется сложным моментам
, незнание которых часто приводит к опасениям при использовании С++: работа с памятью, оптимальность при вызове функций, работа с исключениями и т.д. В дополнении слушателям демонстрируются последние нововведения языка, зафиксированные в стандарте С++11, призванные значительно упростить разработку.
Список книг, помогающих осваивать С++ можно найти тут: http://alenacpp.blogspot.ru/2006/09/c.html
Предварительный курс, осень 2013
- Организация разработки программ
- Компоновка
- Работа с памятью
- Объявления; встроенные типы данных; типы данных, определяемые пользователем
- Функции
- Классы
- Умные указатели
- Введение в STL
- Препроцессор. R-value reference
- Полиморфизм
- Обработка ошибок
- Создание библиотек
Осенью 2013 года видеозапись лекций курса не ведётся, по ссылке можно найти лекции 2011 года. Обратите внимание, что преподаватель сменился, поэтому прочтения могут существенно отличаться.
- Правила отчетности
- Общие правила сдачи задач
- Результаты выполнения тестов и домашних заданий
- Домашняя задача #1. Deadline: 22.10.2013 00:00:00
- Домашняя задача #2. Deadline: 24.11.2013 00:00:00
- Домашняя задача #3 Deadline: 22.12.2013 00:00:00.
Milestones:
- 14.12 00:00
- 18.12 00:00
- 22.12 00:00
- Связаться с проверяющим преподавателем можно, написав письмо на гмейл cpp.csc
Преподаватели
Список лекций
- Историческая справка
- Язык программирование и сопутствующие инструменты:
- библиотеки (стандартные и не очень, в т.ч. для работы с ОС)
- компиляторы (+компоновщик)
- среды разработки / автоматические системы сборки (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 функции
- Функторы
- Наследование
- Виртуальные функции и vtable
- Абстрактные классы
- Множественное наследование
- RTTI
- Шаблоны классов
- Шаблоны функций
- Специализация
Шаблоны: * специализация * взаимодействие с наследованием
В качестве примера шаблонов рассматриваются умные указатели.