Поглиблений курс С++

Старт навчання
Берестейська 06.02.2020
Позняки Старт курсу запитуйте в адміністрації
ВДНГ Старт курсу запитуйте в адміністрації
51 год. по 2-3 рази на тиждень

Опис курсу

Основний курс навчання С++ допоможе Вам вдосконалити навички об’єктно-орієнтованого програмування. Ви навчитеся працювати зі стандартною бібліотекою C++, освоїте основні можливості бібліотеки Qt, отримаєте практичний досвід розробки GUI додатків. Ми навчимо Вас прийомам розробки програмного забезпечення, вирішення типових задач програмування та розробки GUI додатків на мові С++ з допомогою бібліотеки Qt. Ви дізнаєтеся про контейнери, алгоритми та адаптери, розберетеся в архітектурі додатків і базах даних, попрацюєте з багатопоточністю і модульним тестуванням. Курс складається з 12 занять загальною тривалістю 36 академічних годин. З них 12 годин піде на розгляд теоретичного матеріалу, інше – на практичну роботу. У курсі передбачено 12 лабораторних робіт для самостійного засвоєння матеріалу

Після курсу Ви зможете:

  • Удосконалите навички об'єктно-орієнтованого програмування, аналізу і проектування
  • Працювати зі стандартною бібліотекою С++ бібліотекою Qt
  • Розробляти GUI програми
  • Претендувати на отримання серйозної високооплачуваної роботи

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

  • Конструктори/деструктори
    • Правила генерації конструкторів до С++ 11
    • Що таке rvalue-посилання
    • Переміщуючий конструктор і переміщуючий оператор присвоєння
    • Правила генерації конструкторів і операторів присвоювання після С++ 11
    • Функція std :: move. Неправильне застосування функції std :: move як значення, що повертається
    • Різниця між оголошенням конструкторів і операторів присвоювання як приватні методи і оголошення їх за допомогою ключового слова delete.
    • Навіщо взагалі потрібно писати конструктори і оператори присвоювання як недоступні
    • Важливість оголошення конструкторів за допомогою ключового слова default
    • Що таке delegating constructors
    • Просте розуміння що таке NRVO і RVO
    • Проблеми впливу призначеного для користувача конструктора на неявне перетворення типів. Ключове слово explicit
    • Reference-qualified методи класу
  • Статичний поліморфізм
    • Більш детальне розуміння перевантаження функції. Ключове поняття mangling та розгляд прикладу перевантаження на прикладі таблиці символів
    • Шаблони і шаблони класу. Правила виведення типів для шаблонних параметрів. Trailing return type
    • Проблематика шаблонів. Проблеми інстанціювання. Способи явного інстанціювання
    • Приклад написання класу array, як аналог заміни вбудованого статичного масиву
  • Динамічний поліморфізм
    • Особливості роботи з динамічним поліморфізмом (virtual functions)
    • Важливі нововведення, починаючи з С++ 11, для безпечної роботи з динамічним поліморфізмом
    • Ключове слово final в контексті віртуальних функцій
    • Аргумент за замовчуванням і які проблеми він приховує в контексті віртуальних функцій
    • Структура type_info
    • Коли саме корисний динамічний поліморфізм
  • Більш складні застосування шаблонів
    • Структура std :: enable_if, навіщо це може стати в нагоді. Елегантна заміна складності std :: enable_if починаючи з С++ 17
    • Метапрограмування, розгляд заголовку <type_traits> як способу отримання метаінформації про тип і застосування його на прикладі простого шаблону
    • Функція std :: forward
    • Шаблони зі змінним числом параметрів, поняття згортки
    • Шаблонні конструктори
    • Допоміжні шаблони std :: pair, шаблон std :: tuple. Які вони вирішують проблеми
  • Написання бібліотек на мові С ++
    • Що таке колективні бібліотеки
    • Що таке статичні бібліотеки
    • Різниця в написанні статичних і динамічних бібліотек
    • Приклад написання двох видів бібліотек
    • Написання С++-бібліотеки для підключення її в С-код і С++-код
    • Можливі проблеми при написанні бібліотек
    • Роздільна компіляція (багатомодульність) і лінкування
  • Висновок типу в С++ (type deduction)
    • Висновок типу за допомогою ключового слова auto, чи такий тип насправді?
    • Ключове слово decltype
    • Константні посилання як засіб пролонгації часу життя об'єкта підводні камені
  • Виняткові ситуації
    • Просте розуміння виняткових ситуацій. Що таке розкрутка стеку
    • Ключове слово noexcept. Його особливості
    • Висячі посилання і висячі покажчики
    • Виняткові ситуації в конструкторі і деструкторі
      noexcept деструктори і конструктори
    • Чи потрібні виняткові ситуації. Що таке обробка помилок в стилі С, чи потрібна вона та які її переваги в порівнянні з винятковими ситуаціями
  • Розумні покажчики
    • Патерн проектування RAII
    • Проблеми при використанні С-підходу динамічного виділення пам'яті для об'єктів
    • Що таке менеджер пам'яті і просте розуміння виділення пам'яті
    • Види розумних покажчиків. Яку проблему вони вирішують
    • Навіщо потрібні допоміжні функції (make_unique і т.д.). Яку проблематику вони вирішують
    • Чи завжди варто застосовувати розумні покажчики, можливі проблеми продуктивності
    • std :: static_pointer_cast, std :: dynamic_pointer_cast. У чому їхня відмінність від static_cast і dynamic_cast
    • Чи варто перевіряти створені розумні покажчики на nullptr. Коли розумні покажчики кидають виключення, а коли повертають nullptr
  • Введення в STL
    • Що таке STL
    • Трохи про структуру STL
    • Чи варто знати всю бібліотеку STL
  • Контейнери в бібліотеці STL
    • Послідовні контейнери. Види послідовних контейнерів, їхня відмінність. Особливості роботи з кожним із контейнерів. Розгляд основного функціоналу послідовних контейнерів
    • Асоціативні контейнери. Види асоціативних контейнерів, їхні основні відмінності. Особливості роботи. Розгляд основного функціоналу асоціативних контейнерів
    • Які завдання вирішують послідовні контейнери і асоціативні контейнери
    • У яких випадках не варто застосовувати контейнери. Накладні витрати на застосування контейнерів
    • Можливі підводні камені роботи як з послідовними, так і з асоціативними контейнерами
    • Класи адаптери контейнерів. Види та їх особливості
    • Що таке аллокатор як параметр контейнеру. Коли варто писати свій аллокатор, а коли ні
  • Клас std :: string
    • Розгляд основних можливостей класу std :: string. Помилки при створенні та ініціалізації класу std :: string
    • Розгляду основних методів роботи з класом std :: string
  • Ітератори
    • Види ітераторів
    • Застосування ітераторів для кожного виду контейнеру
    • Спосіб роботи з ітераторами
    • Допоміжні функції для роботи з ітераторами
    • Що означає begin-ітератор і end-ітератор
    • Range for C++ як елегантний спосіб обходу контейнерів
  • Алгоритми STL
    • Види алгоритмів
    • Розгляд найчастіше використовуваних алгоритмів
    • Ітератори як клей між контейнером і алгоритмом
    • Чи всі види алгоритмів застосовні до всіх типів контейнерів. Що потрібно розуміти в інтерфейсі алгоритму
    • Переваги застосування методів контейнерів над алгоритмами
    • Переваги застосування алгоритмів над методами контейнерів
  • Компаратор
    • Що таке компаратор і його специфіка застосування в алгоритмах і деяких контейнерах
    • Що таке покажчик на функцію
    • Що таке функціональний об'єкт
    • Опис функції std :: bind
    • Що таке лямбда, що спільного між функціональним об'єктом. Що таке список захоплення і навіщо він потрібен. Особливості захоплення змінних. Ключове слово mutable і його застосування до захопленим параметрам лямбда. Як передати лямбду в С-функцію. Відмінність лямбда в С++ 11 і C++ 14
    • Спосіб генерації лямбда-функції. Типові помилки в написанні лямбда
    • Клас std :: function
  • Процеси і потоки
    • Що таке процес. Опис роботи процесу, виділення пам'яті і пов'язані з ним витрати
    • Що таке потік. Проблеми пов'язані з багатопоточністю
    • Що таке планувальник
  • Потоки в С ++
    • std :: thread і способи роботи. Передача параметрів в потоки. Проблеми пов'язані з класом std :: thread. Що таке join і detach
    • Що таке асинхронне виконання потоку і синхронне виконання
    • std :: async які його переваги в порівнянні з std :: thread. Параметри при створенні std :: async
    • Що таке std :: future
    • Що таке колективні дані. Чи варто використовувати підхід «поділ даних»
    • Помилкове розуміння volatile-змінних в контексті потоків. Що таке бар'єри пам'яті. Клас std :: atomic, для чого він потрібен, пов'язані з ним накладні витрати
    • Помилкове розуміння std :: shared_ptr в багатопотоковому програмуванні
    • Що таке race condition і data race, причини їх отримання
    • Об'єкти синхронізації потоків, доступних в стандартній бібліотеці
    • Що таке дедлок і механізми вирішення його в стандартній бібліотеці
    • std :: promise: що це таке. Його застосування в контексті багатопоточності. std :: future + std :: promise vs conditional variable
    • Виняткові ситуації в потоках
    • Що таке пул потоків і які він вирішує проблеми
  • Мережеве програмування
    • Що таке мережеве програмування
    • Види часто використовуваних протоколів. Що таке TCP і UDP протоколи. Коли їх варто застосовувати
    • Що таке сокети, їх види та застосування
    • Що таке міжпроцесорна взаємодії (IPC). Навіщо потрібна міжпроцесорна взаємодія. Які вона вирішує проблеми. Розгляд часто використовуваних підходів IPC
  • Введення в Qt
    • Meta object compiler
    • Сигнали і слоти
    • QObject
    • Базова робота з віджетами
    • Event loop
    • Структура фреймворку
  • Введення в QML
    • Структура QML компонентів
    • Компоненти QtObject, Item
    • Базові графічні компоненти
    • Best practices в QML
    • Взаємодія C ++ & QML
    • - Q_PROPERTY
    • - Q_INVOKABLE
    • Компоненти ListView, GridView
    • Кастомізація компонентів
    • Attached properties
    • Scalability-додатки
    • Сигнали/Cлот в QML
    • Властивості, аліаси
    • Реєстрація своїх класів в метасистемі
  • Model View в Qt
    • Поняття моделі, їхні види
    • Поняття делегату
    • Поняття ролі
    • Поняття view, їхні види
    • Реалізація своєї моделі, її реєстрація, базові методи QAbstractListModel
    • Створення кастомних компонентів-делегатів з використанням ролей
    • qmldir, розбивка програми на модулі
    • Використання стилів в QML
    • QVariant
  • Робота з базами даних в Qt
    • Підключення до бази даних
    • Класи QDir, QStandardPaths
    • Виконання SQL-запитів
    • Створення SQL-таблиць
    • Обробка помилок
    • Прив'язка значень
    • QVariantList
    • Qt контейнери, їхні переваги та недоліки
    • Copy-on-write
    • Java style iterators vs stl style iterators
  • Багатопоточність в Qt
    • Порівняння C++-потоків і багатопоточності в Qt
    • Багатопоточність на сигналах і слотах
    • QEventLoop
    • QThread
    • QtConcurrent

Мінімальні вимоги:

  • Володіння ПК
  • Знання основ теорії програмування
  • Основи С++
  • Наявність власного ноутбуку для занять в аудиторіях

* Примітка: зазначені знижки не сумуються з іншими діючими акціями та спеціальними пропозиціями. Знижка застосовується тільки до нових заявок та при умові повної оплати курсу. Якщо у Вас виникли питання, звертайтеся за консультацією до наших менеджерів!

spinner-it