spinner-it

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

Старт навчання
Старт курсу запитуйте в адміністрації
48 год. Тривалість заняття - 3 год
З 18:30 (19:00)
Двічі на тиждень

Опис курсу:

Курс складається з 11 занять загальною тривалістю 36 академічних годин. З них 14 годин ми будемо вивчати теоретичний матеріал і 22 години практикуватися. У курсі передбачено 11 лабораторних робіт для самостійного засвоєння матеріалу. Для контролю успішності слухачів передбачено проміжне тестування. Основним завданням курсу є навчання слухачів теоретичним основам об’єктно-орієнтованого програмування, прийомів розробки програмного забезпечення, вирішення типових задач програмування та розробки програм на мові С++.

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

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

Разом дешевше

c-1-min-1 Базовий курс C++
Базовий курс C++
+
c-2-min-1 Базовий курс C++
Поглиблений курс С++
=

15400 грн.

13100 грн.

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

  • Трохи історії
  1. Що таке мова програмування
  2. Машинні мови
  3. Низькорівневі мови (мова асемблера)
  4. Високорівневі мови
  5. Транслятори
  6. Компіляція
  7. Інтерпретація
  8. Парадигми програмування
  9. Модульна парадигма програмування
  10. Функціональна парадигма програмування
  11. Узагальнена парадигма програмування
  12. Об'єктно-орієнтована парадигма програмування
  13. Історія С ++
 
  • Основи GIT-системи контролю версії
  1. Що таке система контролю версії і що вона вирішує
  2. Основні елементи git
  3. Що таке комміт
  4. Що таке гілка
  5. Способи створення репозиторію. Види сервісів, що дозволяють створити віддалений репозиторій
  6. Базові команди git
  7. Практика. Створення репозиторію локально. Створення репозиторію на віддаленому сервері
 
  • Склад мови С++ 
  1. Приклад простої програми С++
  2. Базові способи зібрати додаток
  3. Алфавіт мови
  4. Що таке лексеми
  5. Що таке ідентифікатор як важлива складова програми
  6. Що таке ключові слова
  7. Коментарі (однорядкові, багаторядкові)
  8. Що таке літера. Види літералів. Навіщо вони потрібні в коді
  9. Чим відрізняються строковий літерал від інших типів літералів
  10. Що таке інструкції
  11. Що значить синтаксична помилка. Приклад простої синтаксичної помилки
  12. Що таке семантична помилка. Приклад семантичної помилки і можливі її наслідки
 
  • Змінні і типи даних
  1. Що таке змінна. Синтаксис оголошення змінної
  2. Тип даних. Що таке сувора типізація. Навіщо змінній потрібен тип даних
  3. Цілочисельний тип даних
  4. Символьні типи
  5. Починаючи з С++11, цілочисельні типи з фіксованими розміром, які проблеми вони вирішують
  6. Що таке аліас на тип даних. Приклад з описом typedef. Розуміння типів size_t, time_t — це просто аліас на вбудований тип
  7. Тип void, як маркер різного контексту. Приклад контексту використання цього типу
  8. Логічний тип даних
  9. Речові типи даних. Можливі підводні камені представлення в пам'яті
  10. Простий приклад на асемблері способу представлення цілочисельних типів і речових типів
  11. Способи оголошення змінних. Ініціалізація змінних. Проблема неініціалізованих змінних
  12. Оператор sizeof для отримання розміру змінних і типів
  13. Способи ініціалізації змінних до С++11 і універсальна ініціалізація починаючи з С++11 як засіб вирішення проблем старої ініціалізації
  14. Автоматичне виведення типу. Ключове слово auto і decltype
  15. Константи
  16. Способи оголошення констант
  17. Що таке згортка констант. Приклад С++-коду з оголошенням констант і оптимізованого ассемблерного коду
 
  • Основні операції С ++ 
  1. Види операторів (унарний, бінарний, тернарний). Їхній синтаксис
  2. Неявне перетворення при операторі присвоєння. Що таке зрізка. Що таке звужуюче перетворення. Проблема знакового і беззнакового перетворення
  3. Явне перетворення типів (С-підхід і С++-підхід)
  4. Арифметичні операції
  5. Проблема арифметичних операцій. Цілочисельне ділення на нуль, переповнення, і т.д.
  6. Змішані вирази. Пріоритет операцій
  7. Автоматичне виведення типу як вирішення проблеми переповнення в арифметичних виразах
  8. Тимчасова змінна як результат проміжного обчислення виразу. Як виглядає тимчасова змінна в створеному асемблерному коді (простий опис)
  9. Базові поняття Rvalue і Lvalue
  10. Складовий оператор
  11. Пост- і пре-інкремент і декремент. У чому відмінність між пре- і пост-операцією
  12. Оператори відношення між операндами. Можливі підводні камені
  13. Логічні операції
  14. Бітові операції. Що таке встановлення біту, що таке скидання біту. Що таке little-endian і big-endian. Що таке бітові маски, приклад бітових масок до С++11 і починаючи з С++11
  15. Опис різниці між логічним порівнянням із застосуванням логічних операторів {|| &&} і бітовими операціями {| &}
  16. Арифметичні операції застосовні до типу char і різниця з виведенням на потік символьного типу і цілочисельного типу
  17. Цілочисельний оператор «залишок від ділення». Розгляд прикладу помилкової плутанини між знаковими і беззнаковими типами на створеному асемблерному коді
 
  • Оператори, що керують ходом виконання програми
  1. Умовний оператор if. Приклад можливих проблем з висячими else. Різні підходи з написанням оператора if для уникнення спагетті-коду
  2. Що таке область видимості. Що таке блок
  3. Оператор вибору switch. Проблема fall through. У чому відмінність між оператором вибору switch і логічним оператором if
  4. Що таке compile time- і run time-вираз на прикладі case-гілок оператора вибору switch
  5. Оператор циклу for. Способи оголошення циклу for. Навіщо потрібен вічний цикл. Можливі проблеми знакового і беззнакового порівняння і їхні наслідки
  6. Оператор циклу while
  7. Оператор циклу do while. Використання do while для вирішення проблем з розгалуженням коду із використанням оператору if
  8. Тернарний оператор
  9. Просте розуміння точки слідування на прикладі оператора коми
 
  • Масиви
  1. Що таке масив і в чому його переваги
  2. Оголошення масивів. Способи вказівки розміру масиву. Ініціалізація масиву. Можливі помилки при ініціалізації масиву
  3. Масив змінної довжини як розширення компілятора. Прапор компіляції 3-pedantic
  4. Масив символів або рядку. Способи оголошення. Що таке нуль-термінальний символ. Можливі проблеми при ініціалізації символьного масиву
  5. Доступ до елементів масиву
  6. Що таке вихід за межі масиву. Що таке buffer overflow 
  7. Цикли як спосіб обходу, обробки і виведення масиву на екран
  8. Часті помилки при виборі типу для змінної циклу при роботі з масивом
  9. Розмір масиву. Як отримати кількість елементів масиву
  10. С++11 range for як спосіб зручної роботи з масивом. У чому відмінність range for від інших циклів і які проблеми вирішує range for на відміну від інших циклів
  11. Відмінність символьного масиву від інших типів масивів. Як правильно обходити символьний масив в циклах. Як вивести символьний масив на екран. Як зчитувати символи введені з клавіатури в символьний масив і можливі проблеми
  12. Багатовимірні масиви. Приклади уявлення багатовимірного масиву одновимірним масивом
 
  • Покажчики
  1. Базові поняття пам'яті стек
  2. Що таке локальні змінні і як змінні створюються на стеку. Що таке автоматичне керування пам'яттю
  3. Базові поняття що таке покажчик
  4. Оголошення покажчиків
  5. Способи ініціалізації вказівника. Що таке невалідний вказівник.Що таке розіменування покажчика і можливі проблеми. nullptr як правильний літерал для ініціалізації покажчика. Що значить поняття покажчик на тип. Розмір покажчика, моделі пам'яті різних ОС і платформ. Чому для покажчика правильний тип є void *
  6. Що таке константний покажчик і покажчик на const. Приклад можливих помилок
  7. Арифметика з покажчиками. Чим відрізняються арифметика з покажчиками від арифметики зі змінними
  8. Що спільного між масивом і покажчиком. Як обходити масив за допомогою покажчика. Що означає покажчик на елемент за останнім елементом масиву і навіщо так робити
 
  • Функції
  1. Що таке функція і які вона вирішує проблеми в коді
  2. Синтаксис функції
  3. Базове поняття що таке оголошення і визначення функції. Приклад відмінності
  4. Що таке списки параметрів. Спосіб виклику функції. Завдання значення за замовчуванням для параметру
  5. Значення, що повертається з функції. auto як автоматичне виведення, що повертається. Проблеми при автоматичному виведенні типу. Тип void як маркер необоротного значення функції
  6. Передача параметрів за значенням
  7. Що таке фактичні й формальні параметри
  8. Неправильне використання auto як параметру функції та, як наслідок, розширення компіляторів
  9. Що таке глобальні змінні. Проблема приховування імен глобальних і локальних змінних
  10. Передача за вказівником. Спосіб повернення декількох значень з функції
  11. Що таке посилання. У чому відмінність посилання від покажчика
  12. Посилання як частина інтерфейсу функції
  13. Які проблеми вирішує посилання в порівнянні з покажчиком як параметр функції. Які переваги константної посилання. Чому можна передавати Rvalue, як аргумент константної посилання
  14. Приклад як зробити посилання невалідною
  15. Стек і виклик функцій
  16. Угода про виклик функцій
  17. Масиви як параметри функції. Способи оголошення масиву як параметру функції і часті помилки. Проблема отримання кількості елементів масиву в функції
  18. Рекурсія. Inline-функції
  19. Що таке перевантаження функцій. Що таке mangling імен функції на прикладі генерації ассемблерного коду
  20. Чому перевантаження недоступне в мові С. Простий опис ключового слово extern «C» як приклад опису перевантаження
  21. Що таке покажчик на функцію та які проблеми вирішує передача функції як параметр функції на прикладі алгоритму сортування
  22. Базові поняття що таке lambda як заміна вказівника на функцію. Що таке std :: function
  23. Проблеми при поверненні локальних змінних з функції за посиланням або вказівником
  24. Зняття константності з аргументу використання std :: const_cast
 
  • Простори імен
  1. Що таке простори імен
  2. Що таке вкладені простори імен
  3. Нові можливості оголошення просторів імен в С++17
 
  • Прості призначені для користувача типи даних
  1. Що таке структури. Які вони вирішують проблеми
  2. Оголошення структур
  3. Способи доступу до полів структури
  4. Способи ініціалізації структур до С++11
  5. Ініціалізація структур починаючи з С++11
  6. Розмір структур. Що таке вирівнювання структур. Що таке padding в структурах
  7. Неіменовані структури
  8. Struct binding С++ 17, які він вирішує проблеми
  9. Що таке перерахування і які воно вирішує проблеми
  10. Що таке unscoped перерахування і які у нього проблеми
  11. Що таке scoped-перерахування починаючи з С++11 і які він вирішує проблеми
  12. Що таке об'єднання. Які воно вирішує проблеми
  13. Що таке каламбур типів і як об'єднання допомагає в перетворенні несумісних типів
 
  • Робота з динамічною пам'яттю
  1. Базові поняття про моделі пам'яті. Їхні особливості і відмінності
  2. Відмінність роботи зі стековою пам'яттю і динамічною пам'яттю (купа)
  3. Що таке менеджер пам'яті або чому динамічне виділення пам'яті таке дороге
  4. Робота з динамічною пам'яттю використовуючи З функції
  5. Робота з динамічною пам'яттю використовуючи С++-підхід
  6. Можливі проблеми при роботі з динамічною пам'яттю
 
  • Класи і об'єкти (ООП)
  1. Базові поняття ООП
  2. Що є недоліком функціонального програмування і які завдання вирішує ООП
  3. Основні кити ООП
  4. Синтаксис оголошення класу
  5. Що таке поля класу
  6. Створення об'єкту класу
  7. Рівні доступу в класі
  8. Способи оголошення константних полів в класі до С++11 і після
  9. Що таке статичні поля
  10. Що таке метод класу. Чим відрізняється метод від звичайної функції
  11. Що таке this. Що таке угода про виклик thiscall
  12. Способи оголошення методів класу. Чим відрізняється визначення методу всередині класу від визначення за межами класу 
  13. Що таке константні методи і які вони вирішують проблеми. Ключове слово mutable
  14. Що таке статичні методи і чим вони отличаються від звичайних методів
 
  • Конструктори і деструктори
  1. Що таке конструктор і які він вирішує проблеми
  2. Види конструкторів до С++11
  3. Список ініціалізації. Спосіб ініціалізації полів класу починаючи з С++11. Підводні камені при ініціалізації полів класу
  4. Навіщо потрібен конструктор копіювання і оператор присвоювання
  5. Що таке деструктор і які він вирішує проблеми
  6. Правильна сигнатура для конструкторів і оператора присвоювання
  7. Перевантаження конструкторів
  8. Порядок ініціалізації полів при створенні об'єкту
 
  • Успадкування
  1. Що таке успадкування і які воно вирішує проблеми
  2. Види успадкування
  3. Що таке успадкування (public-успадкування)
  4. Розташування об'єктів в пам'яті при успадкуванні
  5. Порядок ініціалізації при успадкуванні. Підводні камені
  6. Порядок викликів при руйнуванні об'єкту
  7. Shadowing-методи при успадкуванні
  8. Множинне успадкування. У чому відмінність від одиночного успадкування. Підводні камені множинного успадкування
  9. Неоднозначність виклику методу при множині успадкування
  10. Проблема ромбового успадкування
  11. Що таке віртуальне успадкування і навіщо воно потрібне в контексті успадкування
  12. Ключове слово final
 
  • Віртуальні функції
  1. Що таке поліморфізм
  2. Що таке віртуальна функція 
  3. Що таке динамічний і статичний поліморфізм і як він реалізується в мові С++
  4. Ключове слово override і які воно вирішує проблеми в контексті віртуальних функцій
  5. Що таке віртуальний деструктор і навіщо він потрібен
  6. Що таке чисто віртуальні функції. Що таке абстрактний клас
  7. Що таке vtable і vtpr. На що вони впливають
 
  • Шаблони
  1. Що таке шаблони і узагальнене програмування
  2. Що спільного між макросом і шаблоном. Які проблеми макросу
  3. Шаблони класу
  4. Що таке інстанціювання шаблону
  5. Проблема роздування коду
  6. Параметри шаблону. Передача значення в якості шаблонного аргументу
  7. Спеціалізація. Часткова спеціалізація. Явна спеціалізація
  8. Шаблонні функції
  9. Шаблонний метод. Шаблонний конструктор. Які завдання вони дозволяють вирішити
  10. Різниця у виклику шаблонного класу і шаблонної функції
  11. Явна спеціалізація шаблону функції
 
  • Перевантаження операторів
  1. Що таке перевантаження операторів
  2. Коли варто застосовувати перевантаження операторів
  3. Які операції дозволено перевантажувати
  4. У чому різниця між перевантаженням оператору як методом класу і звичайною функцією
  5. Базові угоди про перевантаження операторів
  6. Тонкощі при перевантаженні пре- і пост-інкременту і декременту
  7. Рекомендації з написання інтерфейсу перевантаження операторів
  8. Особливості перевантаження виведення на потік
 
  • Простори імен
  1. Що таке простори імен. Їхні застосування. Які вони вирішують проблеми
  2. Що таке неіменовані простори імен, що спільного між static і неіменованими просторами імен
 
  • Базові поняття про компіляції та системи зборки
  1. Що таке пре-процессінг
  2. Що таке компіляція
  3. Що таке лінковщик
  4. Види компіляторів і їхні особливості
  5. Що таке роздільна компіляція
  6. Що таке заголовний файл
  7. Що таке вартові
  8. Що таке бібліотеки
  9. Система збирання Make
  10. CMake як генератор системи збирання

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

  • Наявність власного ноутбуку для занять в аудиторіях
  • Базове розуміння ООП

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