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

C++ — язык программирования, знание которого будет однозначным плюсом для вашего резюме. Он быстр, на нем можно писать программы любой сложности и он является фундаментом для обучения, ведь многие языки программирования используют в своей основе принципы C++. У него сложный синтаксис, который требует дисциплины и опыта, но этот язык программирования — классическая музыка в мире IT.

На курсе вы познакомитесь с основами C++ и объектно-ориентированного программирования, а также изучите приемы решения типичных задач программирования и разработаете простое приложение на C++.

В рамках курса вы будете работать в группах над реальными проектами.
Это будет увлекательно и эффективно!

Длительность курса 48 часов (16 занятий). Занятия проходят в вечернее время 2-3 раза в неделю.

Чему вы научитесь?

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

Что включает курс?

  • 16 занятий — от теории к созданию простого проекта
  • Контроль знаний — практические работы и тесты
  • Сертификат об окончании
  • Опыт работы в команде
  • Интерактивный личный кабинет с доступом к материалам курса

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

НЕМНОГО ИСТОРИИ

  • Что такое язык программирования
  • Машинные языки
  • Низкоуровневые языки (язык ассемблера)
  • Высокоуровневые языки
  • Трансляторы
  • Компиляция
  • Интерпретация
  • Парадигмы программирования
  • Модульная парадигма программирования
  • Функциональная парадигма программирования
  • Обобщенная парадигма программирования
  • Объектно ориентированная парадигма программирования
  • История С++

ОСНОВЫ 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 как генератор системы сборки

Документ об окончании курса

Сертификат Учебного центра Softline об окончании курса и справка об обучении установленного образца: 

Сертификат Softline_образец Cправка

Информация о курсе

дистанционно
c 11 марта

1104 бел. р. (дист) с НДС 20%

Вендор: Python, Java, JS, C#, C++
Код курса: C++Base
Продолжительность: 16 дней / 48 ак. часов
Направление: C++
Экзамен :
Все расписание
Базовый курс JavaScript (вечерний курс)
JS-Base
дистанционно, с 9 марта
Базовый курс C++ (вечерний курс)
C++Base
дистанционно, c 11 марта
Базовый курс Java (вечерний курс)
Java-Base
дистанционно, c 10 марта
Все предложения
Записаться на курс

Название курса и комментарии*

Имя*

Фамилия*

Отчество*

Компания

Телефон*

Email*

Настоящим, в соответствии с ч.2.ст.18 Закона Республики Беларусь от 10.11.2008 N 455-З(ред. от 11.05.2016) "Об информации, информатизации и защите информации", отправляя данную форму, вы подтверждаете свое согласие на сбор, обработку и хранение ООО «СофтЛайнБел» Ваших персональных данных. ООО «СофтЛайнБел» гарантирует конфиденциальность получаемой от Вас информации. Сбор, обработка и хранение персональных данных осуществляется в целях эффективного оказания услуг, исполнения договоров и пр.