Computer Science Center — это совместная инициатива Computer Science клуба при ПОМИ РАН, компании JetBrains и Школы анализа данных Яндекса.
Центр существует, чтобы дать возможность талантливым студентам и выпускникам развиваться в интересных им направлениях: Computer Science, Data Science или Software Engineering.
Курс по C ++ в двух частях в центре читает Валерий Михайлович Лесин, valery-l, преподаватель CS центра и совместной магистратуры ИТМО и JetBrains «Разработка программного обеспечения / Software Engineering», технический директор Simlabs.
Первая часть курса нужна, чтобы нарастить базу по С++: к концу семестра студенты с большой вероятностью получат достаточно навыков программирования на этом языке для решения своих задач. Пока без move semantics, sfinae, но для начала этого, скорее всего, будет достаточно.
Студентам с опытом использования С++ эта часть поможет закрыть пробелы. Например, в линковке, работе с памятью, лямбда-функциях и других темах. В лекциях будут представлены как ретроспектива устоявшихся практик, так и обзор возможностей, которые предоставляют последние стандарты языка. Курс построен так, чтобы студенты разного уровня могли найти в нём новый для себя материал.
Приятного просмотра!
1. Организация разработки программ на С++.
История и философия языка. Применимость: за и против. Библиотеки, компиляция, средства разработки. Переменные, условия, циклы, функции, простейший ввод и вывод.
2. Компоновка программ. Единицы трансляции. Объявления и определения. ODR. Глобальные и локальные переменные.
3. Работа с памятью. Выполнение программ.
Архитектура, процесс и потоки. Устройство памяти процесса, страничная память. Разыменование, указатели, массивы. Арифметика указателей, константы и константные указатели. Ссылки, инициализация константных ссылок, выделение памяти, утечки памяти.
4. Встроенные типы, инструкции и операторы.
Размеры типов, явное приведение типов, тип void, null terminated strings, перечисления enum, синоним имени typedef. Объявления, области действия и видимости, структуры struct. Операторы, выражения, инкремент/декремент, инструкция (statement) выбора. Циклы, комментарии, операторы.
5. Функции.
Структурное программирование. Объявление функций, передача параметров, передача массивов, возврат значения. Перегрузка, выбор функции. Аргументы по умолчанию. Произвольное количество аргументов, указатель на функцию. Bind & function.
6. Классы.
Типы классов, определение класса, функции-члены, управление доступом, определение функций в классе, 4 главные функции, swap-trick. Поля класса.
7. Namespace. Переопределение операторов.
Объявление и использование namespace’ов, using директива, using объявление, поиск Кёнига. Перегрузка операторов, что можно и нельзя, где и как писать операторы, примеры объявления операторов, явное и неявное преобразование. Смешанная арифметика. Friend функции. Префиксный и постфиксный инкремент. Функторы. Операторы для указателя. Какими делать функции?
8. Динамический полиморфизм: простое наследование.
Реализация объектов. Композиция. Наследование. Расположение полей. Особенности наследования. Конструкторы. Полиморфное поведение. Поле типа, виртуальные функции, таблица виртуальных функций, срезка, чисто-виртуальные функции, открытое и закрытое наследование. Деструктор. Вызов виртуальный функций.
9. Динамический полиморфизм: множественное и виртуальное наследование.
Множественное наследование, разрешение неоднозначности, сокрытие функций, повтор базового класса. Виртуальное наследование, повтор базового класса, управление доступом, использование защищенных методов, динамическое приведение типов и ссылок, static_cast и dynamic_cast, оператор typeid, расположение объекта в памяти.
10. Введение в шаблоны. Шаблоны классов и функций.
Шаблонный класс, особенности шаблонов, шаблонные функции, инстанцирование, параметры шаблонов, эквивалентность типов, выведение типов, перегрузка функций, выбор алгоритма, аргументы по умолчанию.
11. Введение в шаблоны. Специализация. Связь с наследованием. Умные указатели.
Специализация шаблонов класса. Частичная специализация. Общая нешаблонная база. Явное инстанцирование. Специализация шаблонов функций. CRTP. Шаблонный typedef. Наследование и шаблоны. Шаблонные функции в нешаблонном классе. Динамический и статический полиформизм.
12. Умные указатели.
13. Стратегии обработки ошибок. Отладка.
Центр существует, чтобы дать возможность талантливым студентам и выпускникам развиваться в интересных им направлениях: Computer Science, Data Science или Software Engineering.
Курс по C ++ в двух частях в центре читает Валерий Михайлович Лесин, valery-l, преподаватель CS центра и совместной магистратуры ИТМО и JetBrains «Разработка программного обеспечения / Software Engineering», технический директор Simlabs.
Первая часть курса нужна, чтобы нарастить базу по С++: к концу семестра студенты с большой вероятностью получат достаточно навыков программирования на этом языке для решения своих задач. Пока без move semantics, sfinae, но для начала этого, скорее всего, будет достаточно.
Студентам с опытом использования С++ эта часть поможет закрыть пробелы. Например, в линковке, работе с памятью, лямбда-функциях и других темах. В лекциях будут представлены как ретроспектива устоявшихся практик, так и обзор возможностей, которые предоставляют последние стандарты языка. Курс построен так, чтобы студенты разного уровня могли найти в нём новый для себя материал.
Приятного просмотра!
1. Организация разработки программ на С++.
История и философия языка. Применимость: за и против. Библиотеки, компиляция, средства разработки. Переменные, условия, циклы, функции, простейший ввод и вывод.
2. Компоновка программ. Единицы трансляции. Объявления и определения. ODR. Глобальные и локальные переменные.
3. Работа с памятью. Выполнение программ.
Архитектура, процесс и потоки. Устройство памяти процесса, страничная память. Разыменование, указатели, массивы. Арифметика указателей, константы и константные указатели. Ссылки, инициализация константных ссылок, выделение памяти, утечки памяти.
4. Встроенные типы, инструкции и операторы.
Размеры типов, явное приведение типов, тип void, null terminated strings, перечисления enum, синоним имени typedef. Объявления, области действия и видимости, структуры struct. Операторы, выражения, инкремент/декремент, инструкция (statement) выбора. Циклы, комментарии, операторы.
5. Функции.
Структурное программирование. Объявление функций, передача параметров, передача массивов, возврат значения. Перегрузка, выбор функции. Аргументы по умолчанию. Произвольное количество аргументов, указатель на функцию. Bind & function.
6. Классы.
Типы классов, определение класса, функции-члены, управление доступом, определение функций в классе, 4 главные функции, swap-trick. Поля класса.
7. Namespace. Переопределение операторов.
Объявление и использование namespace’ов, using директива, using объявление, поиск Кёнига. Перегрузка операторов, что можно и нельзя, где и как писать операторы, примеры объявления операторов, явное и неявное преобразование. Смешанная арифметика. Friend функции. Префиксный и постфиксный инкремент. Функторы. Операторы для указателя. Какими делать функции?
8. Динамический полиморфизм: простое наследование.
Реализация объектов. Композиция. Наследование. Расположение полей. Особенности наследования. Конструкторы. Полиморфное поведение. Поле типа, виртуальные функции, таблица виртуальных функций, срезка, чисто-виртуальные функции, открытое и закрытое наследование. Деструктор. Вызов виртуальный функций.
9. Динамический полиморфизм: множественное и виртуальное наследование.
Множественное наследование, разрешение неоднозначности, сокрытие функций, повтор базового класса. Виртуальное наследование, повтор базового класса, управление доступом, использование защищенных методов, динамическое приведение типов и ссылок, static_cast и dynamic_cast, оператор typeid, расположение объекта в памяти.
10. Введение в шаблоны. Шаблоны классов и функций.
Шаблонный класс, особенности шаблонов, шаблонные функции, инстанцирование, параметры шаблонов, эквивалентность типов, выведение типов, перегрузка функций, выбор алгоритма, аргументы по умолчанию.
11. Введение в шаблоны. Специализация. Связь с наследованием. Умные указатели.
Специализация шаблонов класса. Частичная специализация. Общая нешаблонная база. Явное инстанцирование. Специализация шаблонов функций. CRTP. Шаблонный typedef. Наследование и шаблоны. Шаблонные функции в нешаблонном классе. Динамический и статический полиформизм.
12. Умные указатели.
13. Стратегии обработки ошибок. Отладка.
Что дополнительно почитать
- Б. Му. Эффективное программирование на С++.
- С. Мейерс. Эффективный и современный С++: 42 рекомендации по использованию С++11 и С++14.