Цей документ є академічним планом розвитку навчального курсу C++ на платформі
kostyl.dev. Він описує логічну структуру, тематичний зміст та педагогічні вимоги до кожної статті, яка має бути розроблена після існуючих 28 статей (до теми аргументів командного рядка включно). Стиль викладу — академічний, текстоцентричний («text-first»), з активним використанням компонентів Docus для інтерактивності.
| № | Файл | Тема |
|---|---|---|
| 01 | 01.intro-algorithms.md | Вступ до алгоритмів та програмування |
| 02 | 02.code-style.md | Стиль коду та оформлення |
| 03 | 03.ide-setup.md | Налаштування IDE (CLion / VS Code) |
| 04 | 04.data-output.md | Виведення даних (std::cout) |
| 05 | 05.data-types-variables.md | Типи даних та змінні |
| 06 | 06.data-input.md | Введення даних (std::cin) |
| 07 | 07.operators-type-conversion.md | Оператори та перетворення типів |
| 08 | 08.loops.md | Цикли (for, while, do-while) |
| 09 | 09.arrays.md | Масиви |
| 10 | 10.sorting.md | Алгоритми сортування |
| 11 | 11.searching.md | Алгоритми пошуку |
| 12 | 12.functions-basics.md | Функції: основи |
| 13 | 13.functions-scope.md | Функції: область видимості |
| 14 | 14.functions-overloading-templates.md | Перевантаження та шаблони функцій |
| 15 | 15.pointers-basics.md | Вказівники: основи |
| 16 | 16.references.md | Посилання (references) |
| 17 | 17.pointers-const-arrays.md | Вказівники, const та масиви |
| 18 | 18.pointer-arithmetic.md | Арифметика вказівників |
| 19 | 19.dynamic-memory.md | Динамічна пам'ять (new/delete) |
| 20 | 20.void-pointers.md | Узагальнені вказівники (void*) |
| 21 | 21.pointers-to-pointers.md | Вказівники на вказівники |
| 22 | 22.member-access-operator.md | Оператор доступу до члена (->) |
| 23 | 23.foreach-loop.md | Цикл for на основі діапазону |
| 24 | 24.function-pointers.md | Вказівники на функції |
| 25 | 25.lambdas.md | Лямбда-вирази |
| 26 | 26.lambda-captures.md | Захоплення у лямбда-виразах |
| 27 | 27.ellipsis.md | Еліпсис (...) та варіадичні функції |
| 28 | 28.command-line-arguments.md | Аргументи командного рядка |
Курс продовжується трьома великими блоками, що логічно виростають із вивченого:
Модуль A: Користувацькі типи даних
└─ enum, enum class, typedef/using, struct, union
Модуль B: Об'єктно-орієнтоване програмування (ООП)
└─ Класи, конструктори, деструктори, інкапсуляція,
спадкування, поліморфізм, абстрактні класи
Модуль C: Стандартна бібліотека та сучасний C++
└─ std::string, std::vector, std::array, std::map,
std::optional, smart pointers, move semantics,
шаблони класів, обробка виключень
Після опанування функцій, вказівників і лямбда-виразів студент може будувати
складні алгоритми, але йому бракує засобів для семантично точного іменування
станів і концепцій програми. Цей модуль заповнює прогалину: enum дає назви
станам, struct — групує пов'язані дані, а union забезпечує роботу з
варіантними даними за умов жорстких обмежень пам'яті.
enum)Файл: 29.enum.mdОрієнтовний обсяг: 2 500–3 500 слів
Залежності: 05.data-types-variables.md, 07.operators-type-conversion.md
enum.int), явне присвоєння значень.unscoped) перерахувань.readFile(), що повертає -1, -2, -3.
Читач бачить код із «магічними числами» і питає: «Що означає -2?»
Відповідь — перерахування.enum, ключове слово, тіло, крапка з комою.sizeof); зв'язок із int.::debugger-view для візуалізації значень.::memory-view для демонстрації байтів.static_cast.std::cin без tricks.std::cout — числовий результат, функція printEnum.PREFIX_VALUE як частковий обхідний шлях.::terminal-preview для демонстрації роботи програм.Direction з чотирма сторонами; вивести їх значення.getStatusMessage(ParseResult), що повертає рядок.enum class)Файл: 30.enum-class.mdОрієнтовний обсяг: 2 000–3 000 слів
Залежності: 29.enum.md
enum class (scoped enumeration) як відповідь C++11.::.static_cast.enum class X : uint8_t).Fruit::LEMON == Color::PINK
проходить компіляцію і повертає true. Чому? Обидва мають значення 0.
Це реальна помилка, яку важко знайти. Рішення — enum class.enum class (або enum struct — синоніми).::) для доступу.static_cast<int>(value) — коли і навіщо.static_cast<MyEnum>(intVal) — небезпека, UB (Undefined Behavior).std::underlying_type_t.enum class Direction : uint8_t { ... }.sizeof порівняння.switch(dir) із case Direction::North:.default та [[fallthrough]].enum vs enum class| Властивість | enum | enum class |
|---|---|---|
| Область видимості | Глобальна | Локальна |
Неявна конвертація в int | ✅ | ❌ |
| Порівняння різних типів | ✅ (баґ!) | ❌ (захист) |
| Задання базового типу | Частково | ✅ |
| Рекомендованість у C++11+ | ❌ | ✅ |
enum із попередньої статті на enum class; виправити звернення.switch для виведення назви дня тижня.Permission : uint8_t (Read/Write/Execute)
та функцію перевірки прав доступу.enum class HttpStatus : uint16_t
з категоризацією (isSuccess(), isRedirect(), isError()).typedef і using)Файл: 31.type-aliases.mdОрієнтовний обсяг: 2 000–2 800 слів
Залежності: 05.data-types-variables.md, 14.functions-overloading-templates.md
typedef: читабельність, підтримка, кросплатформність.typedef oldType newName.using newName = oldType (C++11) як переважний синтаксис.int8_t, uint32_t тощо).std::vector<std::pair<std::string, int>>
тричі в прототипі. Читач відчуває біль. Рішення — один псевдонім.typedef double seconds_t; — базовий патерн._t як конвенція.testScore_t GradeTest() проти int GradeTest().int8_t, int16_t, uint32_t з <cstdint>.std::map<std::string, std::vector<int>>).bool (*compare)(int, int) — незрозумілий синтаксис.typedef bool (*Comparator)(int, int);.using — сучасний синтаксис (C++11)using seconds_t = double; — еквівалент typedef.using кращий: читабельніший порядок (псевдонім = тип).using для шаблонних псевдонімів (template aliases) — перевага перед typedef.<cstdint>| Тип | Розмір | Знак | Опис |
|---|---|---|---|
int8_t | 8 біт | Зі знаком | Малий цілий |
uint8_t | 8 біт | Без знаку | Байт |
int16_t | 16 біт | Зі знаком | Короткий цілий |
uint32_t | 32 біт | Без знаку | Натуральний |
int64_t | 64 біт | Зі знаком | Великий цілий |
ptrdiff_t | — | Зі знаком | Різниця вказівників |
size_t | — | Без знаку | Розміри об'єктів |
typedef у глобальному просторі імен — ризики забруднення.using Meters = double; using Seconds = double;; написати функцію швидкості.int у масиві ідентифікаторів на using StudentID = uint32_t.using.using-псевдонімів,
що перемикаються за допомогою #ifdef між int32_t і int64_t.struct)Файл: 32.struct.mdОрієнтовний обсяг: 3 500–5 000 слів
Залежності: 05.data-types-variables.md, 15.pointers-basics.md, 19.dynamic-memory.md
struct, ініціалізувати агрегатно.. та ->).struct з методами (bridge до ООП).string name; int age; double gpa;.
Три окремі змінні для одного поняття. Передати в функцію — три параметри.
Масив студентів — три масиви. Рішення — struct.struct, члени-дані (data members), крапка з комою після }.Student s = {"Alice", 20, 3.9}.Student s = {.name = "Alice"}.. для об'єктів і посилань.-> для вказівників (повторення з 22.member-access-operator.md).::debugger-view для візуалізації стану структури.sizeof) та вирівнювання (alignment, padding).::memory-view.__attribute__((packed)) — коли і чому небезпечно.const Student&: рекомендований патерн.Student class_students[30]; — масив структур.Address всередині Student.for-each по масиву структур.void print() const { ... }).struct та class у C++ (лише за замовчуванням видимості).struct Point3D {double x, y, z;}; написати функцію відстані.Color[8] та вивести таблицю RGB значень.struct Matrix2x2 з операціями множення.struct LinkedListNode з вказівником на наступний вузол.struct Student, struct Course,
функції пошуку, сортування та виведення звіту.union)Файл: 33.union.mdОрієнтовний обсяг: 2 000–2 800 слів
Залежності: 32.struct.md, 05.data-types-variables.md
union: один блок пам'яті, кілька інтерпретацій.union корисний: мережеві пакети, варіантні типи, рендерери.std::variant (C++17) як безпечну альтернативу.float, або статус uint32_t.
Як зберегти обидва варіанти без зайвих байтів?union, розмір дорівнює розміру найбільшого члена.::memory-view для демонстрації перекриття байтів.uint32_t IP адреса як uint8_t[4].float через uint32_t.union у структурах.union з нетривіальними типами (конструктор/деструктор) — складнощі.std::variant як сучасна альтернативаstd::variant<int, float, std::string>.std::get<> та std::visit.union Data з int i, float f; вивести їх байтові представлення.union IPv4 для зберігання IP-адреси як числа та байтів.std::variant-based систему повідомлень для простого сокет-протоколу.