Курс C++ (базовий)
Опануйте основи класичної мови програмування
C++ — мова програмування, знання якої буде безперечним плюсом для вашого резюме. Вона швидка, нею можна писати програми будь-якої складності та вона є фундаментом для навчання, адже чимало мов програмування використовують у своїй основі принципи C++. Вона має складний синтаксис, який вимагає дисципліни та досвіду, але ця мова програмування — класична музика у світі IT.
На курсі ви познайомитеся з основами C++ та об’єктно-орієнтованого програмування, а також вивчите техніки розв’язання типових завдань програмування та розробите перший простий додаток на C++.
Після завершення курсу ти зможеш розуміти основні принципи C++ і розробляти просте ПЗ цією мовою. Курс підготує тебе до подальшого вивчення поглиблених аспектів мови C++.
Для опанування програми курсу вам знадобиться таке ПЗ:
1. Visual Studio Community — це спеціальна програма для розробки додатків і хмарних служб для різних платформ. Завантажити можна за посиланням.
2. Qt Creator — ще одна платформа для кросплатформної розробки продуктів на С, С ++ і QML. Завантажити можна за посиланням.
3. Git. Програма дозволяє зберігати ваш код локально і на сайті, а також керувати ним. Реєстрація за посиланням.
4. Wireshark — популярна програма аналізу трафіку, з якою будемо працювати на курсі. Завантажити можна за посиланням.
-
Теорії без практики
-
Застарілих механік роботи
-
Переказу чужих лекцій і книг
-
Питань без відповідей
Це буде захоплююче та ефективно!
- Що таке мова програмування
- Машинні мови
- Низькорівневі мови (мова асемблера)
- Високорівневі мови
- Транслятори
- Компіляція
- Інтерпретація
- Парадигми програмування
- Модульна парадигма програмування
- Функціональна парадигма програмування
- Узагальнена парадигма програмування
- Об’єктно-орієнтована парадигма програмування
- Історія С ++
- Що таке система контролю версії і що вона вирішує
- Основні елементи 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 як генератор системи збирання
Зробіть перші кроки в навчанні під керівництвом практикуючих спеціалістів!
Senior Software Development Engineer у компанії EPAM Systems. 9 років досвіду. Займав посаду Software engineer в Ukrgaztech, де розробляв додатки та працював з даними, використовуючи бібліотеку Qt.
Також був Lead Engineer Samsung у R&D Institute Ukraine, де працював з C/C++, EFL framework та Tizen IDE.
Викладає на курсі: С++ Pro.
12+ років досвіду. Працював з різноманітними проектами, серед яких — вбудовані пристрої, мережеві проекти, десктопні та веб-додатки. Володіє навичками роботи з .NET, C#, LINQ, C/C++, SQL, Boost, STL, Multithreading, TCP/IP, Git, Scrum.
Володар сертифікату AZ-300 Azure Architecture Technologies Exam Prep 2020. Писав та підтримував тести функціональної та системної інтеграції, а також тести автоматизації для Windows і веб-додатків.
Викладає на курсі: С++ Pro.
-
Навчання в режимі перегляду записів занять з регулярними вебінарами
для кращого розуміння матеріалу -
Особистий кабінет з доступом до матеріалів курсу
-
Допомога викладача чи ментора курсу
-
Актуальну програму навчання