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

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

Опис курсу

Курс складається з 11 занять загальною тривалістю 36 академічних годин. З них 14 годин ми будемо вивчати теоретичний матеріал і 22 години практикуватися. У курсі передбачено 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
    • Тернарний оператор
    • Просте розуміння точки слідування на прикладі оператора коми
  • Масиви
    • Що таке масив і в чому його переваги
    • Оголошення масивів. Способи вказівки розміру масиву. Ініціалізація масиву. Можливі помилки при ініціалізації масиву
    • Масив змінної довжини як розширення компілятора. Прапор компіляції 3-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