Базовый курс C++

Старт обучения
Берестейская 05.02.2020
Позняки Дату уточните у администрации
ВДНХ Дату уточните у администрации
48 час. по 2-3 раза в неделю

Описание курса

Курс состоит из 11 занятий общей длительностью в 36 академических часов. В курсе предусмотрено 11 лабораторных работ для самостоятельного усвоения материала. Основной задачей курса является обучение слушателей теоретическим основам объектно-ориентированного программирования, приемам разработки ПО, решения типичных задач программирования и разработки приложений на языке С++.

После курса вы сможете:

Разрабатывать ПО на языке C++

  • Выполнять математические расчеты, решать задачи и реализовывать типовые алгоритмы
  • Разрабатывать консольные приложения в операционной системе Linux

Вместе дешевле

Базовый курс C++
+
Продвинутый курс C++
=

16900 грн.

14350 грн.

Программа курса:

  • Немного истории
    • Что такое язык программирования
    • Машинные языки
    • Низкоуровневые языки (язык ассемблера)
    • Высокоуровневые языки
    • Трансляторы
    • Компиляция
    • Интерпретация
    • Парадигмы программирования
    • Модульная парадигма программирования
    • Функциональная парадигма программирования
    • Обобщенная парадигма программирования
    • Объектно ориентированная парадигма программирования
    • История С++
  • Основы GIT-системы контроля версии
    • Что такое система контроля версии и что она решает
    • Основные элементы git
    • Что такое коммит
    • Что такое ветка
    • Способы создания репозитория. Виды сервисов, позволяющие создать удаленный репозиторий
    • Базовые команды git
    • Практика. Создания репозитория локально. Создания репозитория на удаленном сервере
  • Состав языка С++
    • Пример простой программы С++
    • Базовые способы собрать приложение
    • Алфавит языка
    • Что такое лексемы
    • Что такое идентификатор как важная составляющая программы
    • Что такое ключевые слова
    • Комментарии (однострочные, многострочные)
    • Что такое литера. Виды литералов. И зачем они нужны в коде
    • Чем отличаются строковый литерал от остальных типов литералов
    • Что такое инструкции
    • Что значит синтаксическая ошибка. Пример простой синтаксической ошибки
    • Что такое семантическая ошибка. Пример семантической ошибки и возможные ее последствия
  • Переменные и типы данных
    • Что такое переменная. Синтаксис объявления переменной
    • Тип данных. Что такое строгая типизация. Зачем переменной нужен тип данных
    • Целочисленный тип данных
    • Символьные типы
    • Начиная с С++11, целочисленные типы с фиксированными размером, какие проблемы они решают
    • Что такое алиас на тип данных. Пример с описанием typedef.
    • Понимания типов size_t, time_t — это просто алиас на встроенный тип
    • Тип void как маркер разного контекста. Пример контекста использования этого типа
    • Логический тип данных
    • Вещественные типы данных. Возможные подводные камни представления в памяти
    • Простой пример на ассемблере способа представления целочисленных типов и вещественных типов
    • Способы объявления переменных. Инициализация переменных.
    • Проблема неинициализированных переменных
    • Оператор sizeof для получения размера переменных и типов
    • Способы инициализации переменных до С++11 и универсальная инициализация начиная с С++11 как средство решения проблем старой инициализации
    • Автоматический вывод типа. Ключевое слово auto и decltype
    • Константы
    • Способы объявления констант
    • Что такое свертка констант. Пример С++-кода с объявлением констант и оптимизированного ассемблерного кода
  • Основные операции С++
    • Виды операторов (унарный, бинарный, тернарный). Их синтаксис
    • Неявное преобразование при операторе присвоения. Что такое срезка.
    • Что такое сужающее преобразование. Проблема знакового и беззнакового преобразования
    • Явное преобразования типов (С-подход и С++-подход)
    • Арифметические операции
    • Проблема арифметических операций. Целочисленное деление на ноль, переполнение и т.д.
    • Смешанные выражения. Приоритет операций
    • Автоматический вывод типа как решение проблемы переполнения в арифметических выражениях
    • Временная переменная как результат промежуточного вычисления выражения. Как выглядит временная переменная в сгенерированном ассемблерном коде (простое описание)
    • Базовые понятия Rvalue и Lvalue
    • Составной оператор
    • Пост- и пре-инкремент и декремент. В чем отличие между пре- и пост- операцией
    • Операторы отношения между операндами. Возможные подводные камни
    • Логические операции
    • Битовые операции. Что такое установка бита, что такое сброс бита. Что такое little-endian и big-endian. Что такое битовые маски, пример битовых масок до С++11 и начиная с С++11
    • Описание разницы между логическим сравнением с применением логических операторов {|| &&} и битовыми операциями {| &}
    • Арифметические операции, применимые к типу char и разница с выводом на поток символьного типа и целочисленного типа
    • Целочисленный оператор «остаток от деления». Рассмотрения примера ошибочной путаницы между знаковыми и беззнаковыми типами на сгенерированном ассемблерном коде
  • Операторы, управляющие ходом выполнения программы
    • Условный оператор if. Пример возможных проблем с висячими else.
    • Разные подходы с написаниям оператора if для избежания спагетти-кода
    • Что такое область видимости. Что такое блок
    • Оператор выбора switch. Проблема fall through. В чем отличие между оператором выбора switch и логическим оператором if
    • Что такое compile time и run time-выражение. На примере case-веток оператора выбора switch
    • Оператор цикла for. Способы объявления цикла for. Зачем нужен вечный цикл. Возможные проблемы знакового и беззнакового сравнения и их последствия
    • Оператор цикла while
    • Оператор цикла do while. Использования do while, для решения проблем с ветвлением кода с использованием оператора if
    • Тернарный оператор
    • Простое понимание точки следования на примере оператора запятой
  • Массивы
    • Что такое массив и в чем его преимущества
    • Объявления массивов. Способы указания размера массива
    • Инициализация массива. Возможные ошибки при инициализации массива
    • Массив переменной длины как расширение компилятора. Флаг компиляции -pedantic
    • Массив символов или строки. Способы объявления. Что такое нуль-терминальный символ. Возможные проблемы при инициализации символьного массива
    • Доступ к элементам массива
    • Что такое выход за границы массива. Что такое buffer overflow
    • Циклы как способ обхода, обработки и вывода массива на экран
    • Частые ошибки при выборе типа для переменной цикла при работе с массивом
    • Размер массива. Как получить количество элементов массива
    • С++11 range for как способ удобной работы с массивом. В чем отличие range for и других циклов и какие проблемы решает range for в отличии от других циклов
    • Отличие символьного массива от других типов массивов. Как правильно обходить символьный массив в циклах. Как вывести символьный массив на экран. Как считывать символы введенные с клавиатуры в символьный массив и возможные проблемы
    • Многомерные массивы. Примеры представления многомерного массива одномерным массивом
  • Указатели
    • Базовые понятия памяти стек
    • Что такое локальные переменные и как переменные создаются на стеке.
    • Что такое автоматическое управление памятью
    • Базовое понятие указателя
    • Объявление указателей
    • Способы инициализации указателя. Что такое невалидный указатель.
    • Что такое разыменования указателя и возможные проблемы. nullptr как правильный литерал для инициализации указателя. Что значит понятие «указатель на тип». Размер указателя, модели памяти разных ОС и платформ. Почему для указателя правильный тип есть void*
    • Что такое константный указатель и указатель на const. Пример возможных ошибок
    • Арифметика с указателями. Чем отличаются арифметика с указателями от арифметики с переменными
    • Что общего между массивом и указателем. Как обходить массив с помощью указателя. Что означает указатель на элемент за последним элементом массива и зачем так делать
  • Функции
    • Что такое функция и какие она решает проблемы в коде
    • Синтаксис функции
    • Базовое понятие что такое объявление и определение функции. Пример отличия
    • Что такое списки параметров. Способ вызова функции. Задание значения по умолчанию для параметра
    • Возвращаемое значение из функции. auto как автоматический вывод возвращаемого значения. Проблемы при автоматическом выводе типа.
    • Тип void как маркер невозвращаемого значения функции
    • Передача параметров по значению
    • Что такое фактические и формальные параметры
    • Неправильное использования auto в качестве параметров функции и последующее расширения компиляторов
    • Что такое глобальные переменные. Проблема сокрытия имен глобальных и локальных переменных
    • Передача по указателю. Способ возврата нескольких значений с функции
    • Что такое ссылки. В чем отличие ссылки от указателя
    • Ссылка как часть интерфейса функции
    • Какие проблемы решает ссылка в сравнении с указателем как параметр функции. Какие преимущества константной ссылки. Почему можно передавать Rvalue как аргумент константной ссылки
    • Пример как сделать ссылку невалидной
    • Стек и вызов функций
    • Соглашение о вызове функций
    • Массивы как параметры функции. Способы объявления массива как параметра функции и частые ошибки. Проблема получения количества элементов массива в функции
    • Рекурсия. Inline-функции
    • Что такое перегрузка функций. Что такое mangling имен функции на примере генерации ассемблерного кода
    • Почему перегрузка недоступна в языке С. Простое описания ключевого слово extern «C» как пример описания перегрузки
    • Что такое указатель на функцию и какие решает проблемы передача функции как параметр функции на примере алгоритма сортировки
    • Базовые понятия что такое lambda как замена указателю на функцию.
    • Что такое std::function
    • Проблемы при возврате локальных переменных с функции по ссылке или указателю
    • Снятие константности с аргумента использования std::const_cast
  • Пространства имен
    • Что такое пространства имен
    • Что такое вложенные пространства имен
    • Новые возможности объявления вложенных пространств имен в С++17
  • Простые пользовательские типы данных
    • Что такое структуры. Какие они решают проблемы
    • Объявление структур
    • Способы доступа к полям структуры
    • Способы инициализации структур до С++11
    • Инициализация структур начиная с С++11
    • Размер структур. Что такое выравнивание структур. Что такое padding в структурах
    • Неименованные структуры
    • Struct binding С++17. Какие проблемы решает
    • Что такое перечисления и какие оно решает проблемы
    • Что такое unscoped-перечисления и какие у него проблемы
    • Что такое scoped-перечисления, начиная с С++11 и какие он решает проблемы
    • Что такое объединения. Какие он решает проблемы
    • Что такое каламбур типов и как объединение помогает в преобразовании несовместимых типов
  • Работа с динамической памятью
    • Базовые понятия о моделях памяти. Их особенности и отличия
    • Отличие работы со стековой памятью и динамической памятью (куча)
    • Что такое менеджер памяти или почему динамическое выделение памяти такое дорогое
    • Работа с динамической памятью, используя С-функции
    • Работа с динамической памятью, используя С++-подход
    • Возможные проблемы при работе с динамической памятью
  • Классы и объекты (ООП)
    • Базовые понятия ООП
    • Что есть недостатком функционального программирования и какие задачи решает ООП
    • Основные киты ООП
    • Синтаксис объявления класса
    • Что такое поля класса
    • Создание объекта класса
    • Уровни доступа в классе
    • Способы объявления константных полей в классе до С++11 и после
    • Что такое статические поля
    • Что такое метод класса. Чем отличается метод от обычной функции
    • Что такое this. Что такое соглашение о вызове thiscall
    • Способы объявления методов класса. Чем отличаются определение метода внутри класса от определения за пределами класса
    • Что такое константные методы и какие они решают проблемы.
    • Ключевое слово mutable
    • Что такое статические методы и чем они отличаються от обычных методов
  • Конструкторы и деструкторы
    • Что такое конструктор и какие он решает проблемы
    • Виды конструкторов до С++11
    • Список инициализации. Способ инициализации полей класса, начиная с С++11. Подводные камни при инициализации полей класса
    • Зачем нужен конструктор копирования и оператор присваивания
    • Что такое деструктор и какие он решает проблемы
    • Правильная сигнатура для конструкторов и оператора присваивания
    • Перегрузка конструкторов
    • Порядок инициализации полей при создании объекта
  • Наследование
    • Что такое наследование и какие оно решает проблемы
    • Виды наследования
    • Чем является наследование (public-наследования)
    • Расположение объектов в памяти при наследовании
    • Порядок инициализации при наследовании. Подводные камни
    • Порядок вызовов при разрушении объекта
    • Shadowing-методы при наследовании
    • Множественное наследование. В чем отличие от одиночного наследования. Подводные камни множественного наследования
    • Неоднозначность вызова метода при множественном наследовании
    • Проблема ромбового наследования
    • Что такое виртуальное наследование и зачем оно нужно в контексте наследования
    • Ключевое слово final
  • Виртуальные функции
    • Что такое полиморфизм
    • Что такое виртуальная функция
    • Что такое динамический и статический полиморфизм и как он реализуется в языке С++
    • Ключевое слово override и какие он решает проблемы в контексте виртуальных функций
    • Что такое виртуальный деструктор и зачем он нужен
    • Что такое чисто виртуальные функции. Что такое абстрактный класс
    • Что такое vtable и vtpr. На что они влияют
  • Шаблоны
    • Что такое шаблоны и обобщенное программирование
    • Что общего между макросом и шаблоном. Какие проблемы макроса
    • Шаблоны класса
    • Что такое инстанцирование шаблона
    • Проблема раздувания кода
    • Параметры шаблона. Передача значения в качестве шаблонного аргумента
    • Специализация. Частичная специализация. Явная специализация
    • Шаблонные функции
    • Шаблонный метод. Шаблонный конструктор. Какие задачи они позволяют решить
    • Разница в вызове шаблонного класса и шаблонной функции
    • Явная специализация шаблона функции
  • Перегрузка операторов
    • Что такое перегрузка операторов
    • Когда стоит применять перегрузку операторов
    • Какие операции разрешено перегружать
    • В чем разница между перегрузкой оператора как методом класса и обычной функцией
    • Базовые соглашения о перегрузке операторов
    • Тонкости при перегрузке пре- и пост-инкремента и декремента
    • Рекомендации по написанию интерфейса перегрузки операторов
    • Особенности перегрузки вывода на поток
  • Пространства имен
    • Что такое пространства имен. Их применения. Какие они решают проблемы
    • Что такое неименованные пространства имен, что общего между static и неименованными пространствами имен
  • Базовые понятия о компиляции и системах сборки
    • Что такое препроцессинг
    • Что такое компиляция
    • Что такое линковщик
    • Виды компиляторов и их особенности
    • Что такое раздельная компиляция
    • Что такое заголовочный файл
    • Что такое стражи
    • Что такое библиотеки
    • Система сборки Make
    • CMake как генератор системы сборки

Минимальные требования:

  • Наличие собственного ноутбука для занятий в аудиториях
  • Знание основ теории программирования

* Примечание: указанные скидки не суммируются с другими действующими акциями и специальными предложениями. Скидка применяется только к новым заявкам и при условии полной оплаты. Если у Вас возникли вопросы, обращайтесь за консультацией к нашим менеджерам!

spinner-it