Курс С++ Pro
Наразі набір на цей курс не проводиться. Перегляньте інші курси
- Online
- Для початківців
- C / C++
![]() |
|
Навчальний центр: | ITEA – IT Education Academy |
---|---|
Формат: | Курс |
Тривалість навчання: | 108 годин |
Початок курсу: | Дата формується |
Вартість навчання: | 21 600 UAH за курс |
Можлива оплата частинами
На курсі Ви навчитесь використовувати основні структури для створення програм, застосовувати принципи ООП для розробки програм, розробляти консольні додатки в ОС Linux та працювати зі стандартною бібліотекою С++ та бібліотекою Qt. Також отримаєте навички роботи у команді над реальними проєктами.
Програма курсу
Трішки історії
- Що таке мова програмування?
- Машинні мови
- Низькорівневі мови (мова асемблера)
- Високорівневі мови
- Транслятори
- Компіляція
- Інтерпретація
- Парадигми програмування
- Модульна парадигма програмування
- Функціональна парадигма програмування
- Узагальнена парадигма програмування
- Об’єктно-орієнтована парадигма програмування
- Історія С++
Основи Git-системи контролю версій
- Що таке система контролю версії і що вона вирішує?
- Основні елементи Git
- Що таке коміт?
- Що таке гілка?
- Способи створення сховища. Види сервісів, що дозволяють створити віддалений репозиторій
- Базові команди Git
- Практика. Створення репозиторію локально. Створення репозиторію на віддаленому сервері
Зміст мови C++
- Приклад простої програми С++
- Базові способи збірки додатку
- Алфавіт мови
- Що таке лексеми?
- Ідентифікатор як важлива складова програми
- Що таке ключові слова?
- Коментарі (однорядкові, багаторядкові)
- Що таке літера? Види літералів. Їхня значущість у коді
- Чим відрізняються строковий літерал від інших типів літералів?
- Що таке інструкції?
- Що означає синтаксична помилка? Приклад простої синтаксичної помилки
Змінні й типи даних
- Що таке змінна? Синтаксис оголошення змінної
- Тип даних. Що таке сувора типізація? Навіщо змінній потрібен тип даних?
- Цілочисельний тип даних
- Символьні типи
- Цілочисельні типи починаючи з С++11. Які проблеми вони розв’язують?
- Що таке аліас на тип даних? Приклад з описом typedef. Розуміння типів size_t та time_t як аліасів на вбудовані типи
- Тип void як маркер різного контексту. Приклад контексту використання цього типу
- Логічний тип даних
- Речові типи даних. Можливі підводні камені уявлення в пам’яті
Основні операції С++
- Види операторів (унарний, бінарний, тернарний). Їхній синтаксис
- Неявне перетворення при операторі присвоєння? Що таке зрізка? Що таке звужувальне перетворення? Проблема знакового та беззнакового перетворення
- Явне перетворення типів (С підходить і С++ підхід)
- Арифметичні операції
- Проблема арифметичних операцій. Цілочисельне ділення на нуль, переповнення тощо
- Змішані вираження. Пріоритет операцій
- Автоматичний висновок типу як розв’язання проблеми перетворення в арифметичних виразах
- Тимчасова змінна як результат проміжного обчислення виразу. Як виглядає тимчасова змінна в створеному асемблерному коді (простий опис)?
- Базові поняття про Rvalue і Lvalue
- Складовий оператор
Оператори, що керують ходом виконання програми
- Умовний оператор if. Приклад можливих проблем з висячими else. Різні підходи до написання оператора if задля уникнення спагеті-коду
- Що таке область видимості? Що таке блок?
- Оператор вибору switch. Проблема fall through. У чому відмінність між оператором вибору switch і логічним оператором if?
- Що таке compile time і run time вираження на прикладі case гілок оператора вибору switch?
- Оператор циклу for. Способи оголошення циклу for. Для чого потрібен вічний цикл? Можливі проблеми знакового та беззнакового порівняння і їхні наслідки
- Оператор циклу while
- Оператор циклу do while. Використання do while задля розв’язання проблем з розгалуженням коду із застосуванням оператора if
- Тернарний оператор
- Просте розуміння точки наслідування на прикладі коми
Масиви
- Що таке масив і в чому його переваги?
- Оголошення масивів. Способи вказівки розміру масиву. Ініціалізація масиву. Можливі помилки при ініціалізації масиву
- Масив змінної довжини як розширення компілятора. Прапор компіляції — pedantic
- Масив символом vs строки. Способи оголошення. Що таке символ «термінальний нуль»? Можливі проблеми при ініціалізації символьного масиву
- Доступ до елементів масиву
- Що таке вихід за межі масиву? Що таке buffer overflow?
- Цикли як спосіб обходу, обробки та виведення масиву на екран
- Часті помилки у виборі типу для змінної циклу при роботі з масивом
Покажчик
- Базові поняття про стек пам’яті
- Що таке локальні змінні і як змінні створюються на стеку? Що таке автоматичне керування пам’яттю?
- Поняття покажчика
- Оголошення покажчиків
- Способи ініціалізації вказівника. Що таке невалідний покажчик? Що таке розіменування покажчика і якими є можливі проблеми при його проведенні? 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 як генератор системи збирання
Move-семантика
- Що таке move-семантика, яку ключову роль вона грає в сучасному С++?
- Що таке rvalue-посилання?
- Що таке value category та які категорії існують у мові С++ (lvalue, prvalue тощо)?
- Конструктор переміщення
- Оператор переміщення
- Порівняння продуктивності між класом, який реалізує тільки копіювальну поведінку, та класом, що реалізує переміщувальну поведінку
- std::move
- Поради про те, коли варто коректно застосовувати переміщувальні операції. Коли move-семантика не допомагає?
Конструктори та деструктори
- Правило виклику конструкторів, операторів присвоєння базового класу
- Правило 3-х до С++11
- Правило 0 чи правило 5-ти після С++11
- Правила генерації конструкторів та операторів при різних полях
- Коли варто писати клас, який підтримує тільки копіювальну поведінку, а коли — тільку переміщувальну?
- Ключове слово default для конструкторів та операторів, важливість його написання на відміну від явного визначення тіла конструктора
- Ключове слово delete при оголошенні конструкторів, операторів та деструкторів
- Проблеми впливу користувацького конструктора на неявне перетворення типів. Ключове слово explicit
- Ключове слово using при наслідуванні
- Різниця між оголошенням конструкторів та операторів присвоєння (як приватні методи) і оголошення їх за допомогою ключового слова delete
- Що таке delegating constructors?
- Reference-qualified методи класу
- Помилкове застосування move-семантики при наслідуванні
- Copy elision, RVO NRVO
Оптимізація
- Етапи компіляції
- Оптимизація компілятора (inline, const)
- Шаблони як частина оптимізації на етапі компіляції
- Ключове слово constexpr та його важливість кожному стандарту С++
Вивід типу в C++ (Type Deduction)
- Вивід типу за допомогою ключового слова auto: чи такий тип насправді?
- Ключове слово decltype
Шаблони
- Ключове слово typename в шаблонах та його важливість
- Type traits властивості типу, виділення найважливіших та розгляд їх на прикладах
- SFIANE. Застосування std::enable_if та чому його можна використовувати в коді?
- Тип std::enable_if як спосіб реалізації часткової спеціалізації для шаблонної функції
- Оператор if constexprt як можливість елегантної заміни складних конструкцій std::enable_if
- Variadic template vs Fold expression
- Універсальні посилання
- Perfect forwarding, важливість функції std::forward
- Шаблонні методи та їхня відмінність від шаблонного класу
Динамічний поліморфізм
- Особливості роботи з динамічним поліморфізмом (virtual functions)
- Аргумент за замовчуванням: які проблеми в контексті він приховує?
- Операції static_cast та dynamic_cast
- RTTI, структура type_info
- Приклад динамічного поліморфізму на одному з патернів проектування
- Virtual destructor для уникнення memory leaks
Лямбди
- Вказівник на функцію
- Функтор
- Лямбда, список захоплення
- Застосування auto в аргументах лямбди
- Ключове слово mutable та чому його необхідно оголосити в сигнатурі лямбди?
Розумні вказівники
- Функції new та malloc
- RAII
- Функції std::unique_ptr та 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?
Виключні ситуації
- Виняткові ситуації. Їхнє важливе застосування
- Виняткові ситуації 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, який не кидає винятки
Простори імен
- Що таке простори імен та які проблеми вони розв’язують у великому коді?
- Inline namespace (provide library version)
- Вкладені простори імен
- Using-directive, Using-declaration
- ADL (argument dependent lookup), правила пошуку імен
Потоки в C++
- Основи багатопотоковості
- Concurrency vs parallelism
- Функція std::thread. Що таке join і detach, та чому їх варто викликати?
- Передача параметрів в потоки та можливі підводні камені
- Значення, що повертається з потоку при роботі з std::thread. std::future and std::promise
- Виняткові ситуації в потоках
- Функції std::async та std::thread. Особливість std::future в std::async
- Поняття data race, race conditions. Можливі проблеми при роботі в багатопотоковому коді
- Що таке об`’ктb синхронізації в багатопотоковому коді? Важливість їхнього застосування
- Strong memory model vs weak memory model
- Функція std::mutex. Чому std::mutex — це іноді погано?
- Важливість RAII підходу при роботі з std::mutex
- Функція std::recursive_mutex. Read-write mutex (std::shared_mutex)
- Thread-safe variable Initialisation. std::call_once. Способи написання потокобезпечного singleton. Підводні камені із застосуванням static initialization
- Функція std::condition_variable. Що таке spears wakeup та lost wakeup?
- Strong memory model vs weak memory model
- Функція std::atomic
- Помилкове розуміння std::shared_ptr в багатопотоковому програмуванні
- Volatile — це не механізм синхронізації потоку
Бібліотека STL
- Що таке бібліотека STL? Що вона дозволяє вирішувати в повсякденному програмуванні?
- Контейнери в STL. Їхня структура, особливості та які вони виконують задачі
- Ітератори. Що це? Чому вони потрібні? Їхні властивості. Приклад написання свого ітератора
- Що таке компаратори? Функція std::bind
- Алгоритми. Важливість ітераторів при роботі з алгоритмами. Розгляд категорій алгоритмів
- Псевдоконтейнери
Опціональні теми (вибір теми):
- Мережеве програмування з оглядом бібліотеки Boost чи Qt
- Мережеве програмування та бібліотека Boost.Asio
- Network model OSI layers
- Поняття IPC (inter process communication)
- Що таке клієнт-сервер?
- Що таке протоколи обміну даними?
- Що таке socket, endpoint?
- TCP-протокол, реалізація TCP-клієнта та сервера
- UDP-протокол, реалізація UDP-клієнта та серверу
- Написання pool thread у прикладі при роботі з TCP-сервером
- Формати обміну даними (json і т. п.)
- GRPC. protobuf. Поняття серіалізації та десеріалізації даними
- Огляд бібліотеки Boost. Qt
- Meta object compiler
- Сигнали та слоти
- QObject
- Базова робота з віджетами
- Event loop
- Структура QML-компонентів
- Базові графічні компоненти
- Взаємодія C++ & QML
- Кастомізація компонентів
- Компоненти ListView, GridView
- Сигнали/слоти в QML
- Реєстрація своїх класів в метасистемі
- Поняття моделі, їхні види
- Поняття делегата
- Поняття ролі
- Реалізація своєї моделі, її реєстрація, базові методи
- QAbstractListModel
- Багатопотоковість у Qt
Як скласти резюме і пройти співбесіду
- Структура резюме
- FAQ
- Як вести себе на співбесіді
- Основні помилки на співбесіді
- Бонусне заняття з англійської мови
- Урок пошуку роботи
Особливості курсу
- Вечірні заняття 2 рази на тиждень (Ср, Сб - 19:00-22:00)
- Лише необхідна теорія й багато практики
- Робота над реальними проєктами у групах
- Доступ до матеріалів протягом року
- Мінікурс з soft skills
- Підготовка до пошуку роботи
Викладачі курсу
- Микола Солянко - Senior Software Development Engineer у компанії EPAM Systems
- Роман Ткачик - Володар сертифікату AZ-300 Azure Architecture Technologies Exam Prep 2020
Категорії курсу
Читайте нас в Telegram, щоб не пропустити анонси нових курсів.
Схожі курси
Навчальний центр
Академія Професій Майбутнього
Формат
Online
Початок навчання
Дата формується
Тривалість
32 занять
Рівень
Для дітей
Мова навчання
Ukrainian
Вартість
500 UAH за годину
Навчальний центр
Robot Dreams
Формат
Online
Початок навчання
Дата формується
Тривалість
32 занять
Рівень
Для початківців
Мова навчання
Ukrainian
Вартість
уточнюйте
Навчальний центр
Junior IT
Формат
Online
Початок навчання
Дата формується
Тривалість
9 місяців
Рівень
Для дітей
Мова навчання
Ukrainian
Вартість
уточнюйте
Навчальний центр
IT-Столиця
Формат
Online
Початок навчання
Будь-який момент
Тривалість
10 занять
Рівень
Для досвідчених
Мова навчання
Ukrainian
Вартість
6 200 UAH за курс