Курс "Программирование на языке C++"
C++ используется для создания программного обеспечения разного рода: от игр до операционных систем. Широкоиспользуется в интенсивной обработке данных и научных расчетах.
C++ предоставляет разработчикам мощный и гибкий инструмент для создания программного обеспечения. Он позволяет писать эффективный и быстрый код, что делает его одним из наиболее популярных языков программирования в мире.
C++ позволяет создавать приложения и программы любой сложности: от простых консольных утилит до сложных игровых движков
На C++ можно написать практически все что угодно, от системных приложений до мобильных приложений.
На C++ можно написать практически любое программное обеспечение, от простых консольных утилит до сложных приложений. Благодаря C++ работают Unreal Engine 4, Microsoft Office и Adobe Photoshop.
В курсе четыре части. Каждая часть, это не менее 20 занятий. C++ — это достаточно серьезный язык, к нему требуется осознанный подход.
Программа курса:
Часть 1: Основы языка и процедурное программирование
1. Введение в С++ и настройка окружения
-
Введение
-
Основные команды в терминале. Компиляция программ
-
Int main VS void main; параметры функции main
-
Compile-time errors, runtime errors, undefined behavior
2. Фундаментальные конструкции
-
Ввод/вывод с помощью cin/cout
-
Escape последовательности
-
Пространство имён. Оператор using
-
Типы данных
-
Переменные: объявление, именование, инициализация
-
Ключевое слово auto
-
Константы
-
Операторы (арифметические, логические, сравнения)
-
Инкремент, декремент
-
Сокращенные арифметические формы
3. Управляющие конструкции
-
Ветвления и циклы
-
Конструкция if else
-
Тернарный оператор
-
Оператор switch
-
Цикл while, do while
-
Цикл for. Фишки, фичи, особенности
-
Операторы break, continue
-
Оператор перехода goto
-
Цикл for each
-
Логические операции, вложенные ветвления
4. Составные типы данных: массивы и строки
-
Что такое массив. Инициализация массива
-
Вывод массива. Массивы и циклы (
-
Что такое sizeof
-
Перестановки в массивах
-
Циклический сдвиг в массиве
-
Частотный анализ последовательности
-
Строки. Нуль терминатор
-
Строки
-
String
-
Приведение типов
-
ASKII
-
Строки и указатели
-
Конкатенация строк
5. Функции
-
Создание функций
-
Что такое функции
-
Параметры функции
-
Передача массива в функцию
-
Прототипы функций
-
Область видимости
-
Параметры по умолчанию
-
Что такое inline
-
Перегрузка функций
-
Шаблонные функции
-
Функции и стек
-
Рекурсия
-
Предикаты
6.Указатели, ссылки и динамическая память
-
Указатели. Ссылки
-
Константные указатели и ссылки
-
Арифметика указателей
-
Динамическая память, утечка памяти
-
New и delete
-
Nullptr
-
Динамический массив
-
Двумерный динамический массив
-
Копирование динамического массива
-
Работа с динамическими массивами
-
Передача параметров в функцию по указателю/ссылке
-
Возврат нескольких значений функции через указатели/ссылки
-
Константные аргументы функции
-
Работа с файлами: чтение/запись
-
Fstream: чтение/запись в файл
-
Файловые потоки: открытие/закрытие, режимы доступа
-
Чтение и запись данных в файл
-
Чтение и запись данных в файл в бинарном режиме
-
Чтение/запись объекта класса в файл
8. Дополнительные темы процедурного программирования
-
Генератор случайных чисел
-
Как пользоваться отладчиком
-
Вложенный цикл
-
Указатель на функцию
-
Препроцессор. Макросы с аргументами
-
Условная компиляция
-
Терминология
-
Кольца вычетов, системы счисления, простые числа
-
Метод грубой силы
Часть 2: Объектно-ориентированное программирование (ООП)
-
Введение в ООП
-
Что такое ООП
-
Классы и объекты
-
Структуры
-
Режимы доступа: public, private, protected
-
-
Базовые механизмы классов
-
Методы класса
-
Конструктор класса. Перегрузка конструкторов
-
Конструктор по умолчанию. Ключевые слова default, delete
-
Списки инициализации
-
Деструктор
-
Указатель this
-
Определение методов вне класса
-
Константные методы. Ключевое слово mutable
-
Статические поля и методы
-
Static id generator
-
Паттерн Singleton
-
Геттеры и сеттеры
-
Инкапсуляция
-
Этапы жизни объектов класса
-
-
Перегрузка операторов
-
Перегрузка операторов
-
Перегрузка оператора =
-
Перегрузка оператора == и !=
-
Перегрузка математических операций
-
Перегрузка оператора ++ и --
-
Перегрузка оператора [ ]
-
Перегрузка оператора ( ). Функторы
-
Перегрузка операторов ввода/вывода << и >>
-
Переопределение расширенного оператора присваивания
-
Переопределение оператора преобразования типов
-
Оператор spaceship
-
-
Отношения между классами
-
Friend функции
-
Дружественный метод класса
-
Дружественные классы
-
Вложенные классы
-
Агрегация и композиция
-
Ассоциация и зависимость
-
-
Наследование и полиморфизм
-
Наследование классов
-
Модификаторы доступа при наследовании
-
Порядок вызова конструкторов и деструкторов при наследовании
-
Вызов конструктора базового класса
-
Объект дочернего класса. Переопределение методов и полей
-
Виртуальные методы
-
Ключевые слова override, final
-
Абстрактный класс. Чисто виртуальные методы
-
Виртуальный и чисто виртуальный деструктор
-
Вызов virtual метода
-
RTTI, dynamic_cast. Таблицы виртуальных функций
-
Полиморфизм
-
-
Продвинутые темы ООП
-
Множественное наследование
-
Порядок вызова конструкторов и деструкторов при множественном наследовании
-
Тонкости множественного наследования
-
Ромбовидное наследование. Виртуальное наследование
-
Интерфейсы
-
Конструктор копирования
-
Конструктор преобразования
-
Делегирующие конструкторы
-
Explicit
-
Правило трёх
-
Массив объектов класса
-
Часть 3: Продвинутые возможности и стандартная библиотека
-
Шаблоны
-
Шаблоны классов
-
Наследование шаблонных классов
-
Специализация шаблонов
-
Шаблоны с нетиповыми параметрами
-
Вариативные шаблоны. Выражения свёртки
-
-
Стандартная библиотека шаблонов (STL)
-
Вектор (Vector)
-
Контейнеры: stack, queue, deque, list, set, map, multiset, multimap
-
Итераторы. Виды итераторов. Реализация
-
Алгоритмы стандартной библиотеки
-
Собственный контейнерный класс
-
Потоковые классы строк
-
-
Управление памятью и умные указатели
-
Умные указатели: unique_ptr, shared_ptr, weak_ptr
-
Auto_ptr (устаревший)
-
Динамический массив и умные указатели
-
RAII
-
Семантика перемещения
-
Понятие lvalue и rvalue выражений. Rvalue-ссылки
-
Конструктор перемещения. Операторы присваивания перемещением
-
Функция std::move. Универсальные ссылки. Функция std::forward
-
Copy Elision. Return value optimization
-
-
Функциональное программирование и лямбды
-
Лямбда-выражения. Анонимные функции
-
Захват контекста лямбдой
-
Объекты замыканий. Обобщенные лямбды
-
Std::function и ее реализация
-
Функторы
-
Псевдонимы функции
-
-
Обработка ошибок и исключения
-
Исключения: try catch, throw
-
Несколько блоков catch
-
Собственные исключения. Классы исключений
-
Exception safety
-
Исключения в конструкторах
-
-
Разное
-
Многофайловые проекты, защита от повторного включения
-
Объединение Union
-
Тип enum
-
Время выполнения
-
Ключевое слово typedef
-
Директива extern
-
Formatirovanie vvoda/vyvoda dannyh
-
Validation polzovatelskogo vvoda
-
Часть 4: Метапрограммирование и внутренние механизмы (для углубленного изучения)
-
Вычисления на этапе компиляции
-
Вычисления на этапе компиляции
-
Constexpr переменные и функции
-
Consteval, is_constant_evaluated
-
Классическое метапрограммирование
-
Метафункции
-
-
Шаблоны и SFINAE
-
Зависимые имена
-
SFINAE, enable_if
-
Реализация type_traits с помощью SFINAE
-
SFINAE-friendliness
-
-
Концепты
-
Constraints and requirements
-
Requires-выражения. Концепты
-
-
Внутреннее устройство механизмов C++
-
Стековая, статическая и динамическая память
-
Сложные объявления
-
Приведения типов: const_cast, reinterpret_cast и др.
-
Указатели на члены
-
Внутреннее устройство vector, list, map, deque, unordered_map
-
Аллокаторы, allocator_traits
-
Allocator-aware контейнеры. Перегрузка new и delete
-
Разновидности и реализация operator new. Выравнивания. Битовые поля
-
Scoped allocators. Атрибуты
-
Вывод типов: auto, decltype, decltype(auto)
-
Deducing this. CTAD. Structured bindings
-
Tuple, идея реализации
-
Type erasure, any
-
Variant, visit. Overload pattern
-
Unions
-
Ссылочные квалификаторы
-
Связывание (ODR). Внешнее и внутреннее связывание
-
-
Алгоритмы и структуры данных (практическое применение)
-
Стек
-
Циклическая очередь на массиве
-
Бинарный поиск корня функции
-
Бинарный поиск в массиве
-
Поиск экстремума в потоке
-
Сортировка пузырьком
-
Сортировка подсчетом и поразрядная
-
Пирамида
-
Рекурсивные сортировки
-
Пять принципов SOLID
-
Паттерны
-
Бинарный поиск
-
Графы. Поиск в глубину
-
Декартово дерево
-
Кратчайшие пути в графах
-
Перебор
-
Последовательные структуры данных
-
Кому интересен C++?
Да, если вы хотите разрабатывать сложные продукты и сервисы.
Опытные C++-программисты — это разработчики ИИ, беспилотных автомобилей, нейронных сетей, банковских, поисковых и ГИС-систем, операционных систем, микроконтроллеров, браузеров, серверов и видеоигр.

