Онлайн обучение

C++ Advanced

Стать Java Developer? С ITEA!
Курс C++ Advanced — обучение разработке программного обеспечения на одном из самых популярных языков программирования. С нами ты выучишь язык эффективно, быстро и качественно!

КОГДА

Старт

Идет набор на курс

СКОЛЬКО

17 занятий

2-3 раза в неделю

с 19:00 до 22:00

ЦЕНА

490 USD

295 USD

Доступна оплата частями

Как проходят курсы по C++ Advanced

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

Вебинар

Проходя C++ advanced курсы онлайн, ты извлечешь множество преимуществ. Занятия проходят в Zoom вместе с преподавателем. На них ты можешь задать вопросы. И чем чаще ты будешь это делать, тем больше пользы ты получить от курса.

Домашние задания

После каждой лекции группе задают домашнее задание. Именно оно поможет тебе понять свой уровень подготовки к карьере в IT и поработать над ошибками.

Поддержка ментора

Не будем юлить — бывает так, что домашнее задание кажется невыполнимым или же есть ощущение, что на лекции было упущено что-то важное. Это не страшно — просто свяжись с ментором курса и он прояснит все интересующие моменты. Никто не закончит курс без знаний.

Курсовой проект

Окончив обучение С++ Advanced, у тебя будет первый готовый проект, который поможет в трудоустройстве и даст сто очков уверенности в своих силах. К тому же, это полезный актив и тренировочная площадка на будущее.

Почему стоит выбрать C++ Advanced обучение в ITEA

Онлайн-курсы с оффлайн-преимуществами

Наши занятия проходят в Zoom. Это удобный формат с возможностью задать вопрос преподавателю и даже работать в группах. Мы соединили преимущества онлайн и оффлайн обучения и получили идеальную формулу.

Актуальные программы обучения

Продвинутый C++-курс познакомит тебя с технологией актуальной версии, которую используют IT-компании. Понимание тенденций разработки и знание своего инструмента — одни из главных критериев при приеме на работу.

Стажировка и трудоустройство

После курса ты получишь доступ к партнерскому ресурсу JunGo — это job-сайт «для своих», где наши выпускники находят работу в компаниях-партнерах. Помощь в составлении резюме, портфолио и советы по прохождению собеседований прилагаются. Таким образом, ты сведешь к нулю риски пройти продвинутое С++-обучение и остаться невостребованным.

Комплексная подготовка к IT

Продвинутое С++-обучение подразумевает и прокачку soft skills. Уже давно недостаточно лишь уметь кодить, чтобы получить работу. Преподаватель и ментор сделают свич в IT легким, избавив тебя от лишних переживаний.

Новые победы? С ITEA!

Обучение С++ Advanced — новый виток твоего профессионального развития. Прокачай уровень разработки на С++ вместе с ITEA!

Записаться на курс

Junior

от 1 года опыта
$600+

Middle

2-3 года опыта
$1500+

Senior

от 4-х лет опыта
$3500+
Записаться на курс

Твой план обучения «от» и «до»

1. Move семантика
  • Что такое move семантика и какую ключевую роль она играет в современном С++?
  • Что такое rvalue ссылка?
  • Что такое value category и какие категории существуют в языке С++ (lvalue, prvalue т. д.)?
  • Конструктор перемещения
  • Оператор перемещения
  • Сравнение производительности между классом, реализующим только копирующее поведение, и классом, реализующим перемещающее поведение
  • std::move
  • Советы о том, когда стоит корректно применять перемещающие операции (когда move семантика не помогает?)
2. Конструкторы и деструкторы
  • Правило вызовов конструкторов, операторов присвоения базового класса
  • Правило 3-х до С++11
  • Правило 0 или правило 5-ти после С++11
  • Правила генерации конструкторов и операторов при разных полях
  • Когда стоит писать класс, который поддерживает только копирующее поведение, а когда только перемещающее?
  • Ключевое слово default для конструкторов и операторов, важность его написания в отличие от явного определения тела конструктора
  • Ключевое слово delete при объявлении конструкторов, операторов и деструкторов
  • Проблемы влияния пользовательского конструктора на неявное преобразование типов. Ключевое слово explicit
  • Ключевое слово using при наследовании
  • Разница между объявлением конструкторов и операторов присваивания (как приватные методы) и объявлением их с помощью ключевого слова delete
  • Что такое delegating constructors?
  • Reference-qualified методы класса
  • Ошибочное применение move семантики при наследовании
  • Copy elision, RVO NRVO
3. Оптимизация
  • Этапы компиляции
  • Оптимизация компилятора (inline, const)
  • Шаблоны как часть оптимизации на этапе компиляции
  • constexpr и его важность в каждом стандарте С++
4. Вывод типа в С++ (type deduction)
  • Вывод типа с помощью ключевого слова auto: таков ли тип на самом деле?
  • Ключевое слово decltype
5. Шаблоны
  • Ключевое слово typename в шаблонах и его важность
  • Type traits свойства типа, выделение наиболее важных и рассмотрение их на примерах
  • SFIANE. Применение std::enable_if и зачем его можно использовать в коде?
  • std::enable_if как способ реализации частичной специализации для шаблонов функций
  • if constexprt как возможность элегантной замены сложных конструкций std::enable_if
  • Variadic template vs Fold expression
  • Универсальные ссылки
  • Perfect forwarding, важность функции std::forward
  • Шаблонные методы и их отличие от шаблонного класса
6. Динамический полиморфизм
  • Особенности работы с динамическим полиморфизмом (virtual functions)
  • Аргумент по умолчанию, какие он скрывает проблемы в контексте?
  • static_cast vs dynamic_cast
  • RTTI, структура type_info
  • Пример динамического полиморфизма на одном из паттернов проектирования
  • Virtual destructor для избегания memory leaks
7. Лямбды
  • Указатель на функцию
  • Функтор
  • Лямбда, список захвата
  • Применение auto в аргументах лямбды
  • Ключевое слово mutable и зачем его необходимо объявить в сигнатуре лямбды?
8. Умные указатели
  • new vs malloc
  • RAII
  • std::unique_ptr vs std::shared_ptr. Move vs Copy
  • Вспомогательные функции (make_unique и т. д.).
  • Пользовательские deleter объекты как аргументы std::unique_ptr и std::shared_ptr. decltype как вывод сигнатуры функции
  • Советы по корректному написанию custom deleter для unique_ptr
  • Control block в std::shared_ptr. Зачем он нужен, какие он решает задачи, и каковы возможные подводные камни при выделении ресурса с помощью std::make_shared?
  • std::weak_ptr, его применение и влияние на блок управления в std::shared_ptr
  • Выделение динамического массива с помощью std::unique_ptr и std::shared_ptr. Специализация
  • Производительность std::unique_ptr и std::shared_ptr
  • std::static_pointer_cast, std::dynamic_pointer_cast. В чем их отличие от static_cast и dynamic_cast?
9. Исключительные ситуации
  • Исключительные ситуации. Их важное применение
  • Исключительные ситуации vs код возврата ошибки. Когда полезно применять код возврата ошибки?
  • Блоки try catch
  • throw как генерация исключения
  • Класс std::exception. Виртуальный метод what
  • Порядок написания блоков catch
  • Что такое раскрутка стека при генерации исключения? Что будет, если при генерации исключения не будет найден подходящий блок catch?
  • Что такое инвариантность при генерации исключения в конструкторе? Пример при написании operator =
  • Smart pointers как способ избежать утечки ресурсов при генерации исключения
  • Исключение не должно покидать деструктор
  • Ключевое слово noexcept
  • Оптимизация при написании функций как noexcept. Важность написания перемещающего конструктора как noexcept (на примере std::vector). Почему std::vector выбирает при реалокации копирующее поведение как дефолтное вместо перемещающей семантики (правило инвариантности)?
  • Компиляция кода с флагом -fno-exceptions, возможные опасности
  • new(std::nothrow) как способ использования оператора new, который не кидает исключения
10. Пространства имен
  • Что такое пространства имен и какие проблемы они решают в большом коде?
  • Inline namespace (provide library version)
  • Вложенные пространства имен
  • Using-directive, Using-declaration
  • ADL (argument dependent lookup), правила поиска имен

Преподаватель курса:

Команда ITEA собрала лучших практиков: руководителей, senior-специалистов и экспертов с многолетним опытом

Николай Солянко

Senior Software Development Engineer в EPAM Systems

Более 9 лет опыта. Занимал должность Software engineer в Ukrgaztech, где разрабатывал приложения и работал с данными, используя библиотеку Qt. Также был Lead Engineer Samsung в R&D Institute Ukraine, где работал с C/C++, EFL framework и Tizen IDE.

Успей забронировать свое место в группе

Если после первого занятия ты почувствуешь, что этот курс не для тебя (например, не подходит по сложности), то мы вернем деньги.

Тебе могут подойти эти курсы:
Расписание курсов
Отвечаем на самые часто задаваемые вопросы
Не будет в курсе много теории? Я получу практические знания?
Информация без практического закрепления долго не держится в памяти. Поэтому после получения новых знаний, наши студенты сразу применяют их на практике. Преподаватель помогает им справиться с задачами и отвечает на вопросы, которые могут возникнуть. Поэтому тебя ожидает практика на занятиях, в домашних заданиях, а также при работе с собственным проектом в конце курса.
Если я делаю паузу в обучении (например, по болезни), могу ли я восстановиться? Или время и деньги будут потеряны?
Если ты был вынужден временно прекратить обучение — не нужно снова возвращаться к самому началу. Ты всегда можешь продолжить с того же места, где остановился. Детали восстановления расскажет наш менеджер.
Как происходит процесс трудоустройства в ITEA после прохождения курса и получения сертификата?
Студенты, которые набрали максимальное количество баллов в ходе обучения и прошли программу Roadmap, получают специальную форму резюме, по которой мы сотрудничаем с нашими партнерами. Мы также проводим проверку резюме, сопроводительных писем и даем консультации, если возникают вопросы. Наш карьерный центр мотивирует и поддерживает каждого кандидата до тех пор, пока он не выберет для себя лучшее предложение.
Будет ли преподаватель помогать мне с решением практических задач: давать советы, смотреть скриншоты, объяснять то, что я не понял?
Да. Преподаватель всегда на связи, чтобы направить студента и при необходимости исправить его. Он основывает свое обучение на собственном опыте и приводит примеры из собственной практики. Преподаватель не движется дальше по программе, пока студенты не усвоят материал на нужном уровне.
Есть ли возрастные ограничения на прохождение курса?
Курсы нацелены на аудиторию в возрасте от 18 лет.
Нужно иметь предварительную подготовку в рамках вашего обучения?
Минимальные требования указаны на странице каждого курса. Чаще всего базовые курсы программирования не требуют специальной подготовки. Для продвинутого обучения достаточно материала предыдущего курса.
Какой уровень английского нужен для трудоустройства на позицию Junior?
Уровень английского напрямую зависит от вакансии. Для многих Junior-специалистов английский уровня Intermediate будет преимуществом, однако для некоторых вакансий достаточно уровня Elementary.