Українська
Контрольні питання
Питання для самоперевірки та підготовки до іспиту, згруповані за темами курсу.
Тема 1. Мова C++ і перша програма
- Коротко опишіть історію розвитку мови C++ та її стандартів. Які основні нововведення пов’язують із C++26 і як перевірити їхню підтримку встановленим компілятором?
- Поясніть етапи побудови програми мовою C++: препроцесування, компіляція та компонування. Що таке одиниця трансляції?
- Як створити, зібрати та запустити консольний проєкт C++ у Microsoft Visual Studio 2026? Поясніть конфігурації Debug і Release.
- Опишіть структуру найпростішої програми мовою C++: функція main, підключення бібліотек, простори імен.
- Що таке система керування версіями Git? Поясніть поняття репозиторію, коміту, гілки та основні команди Git.
- Як працювати з репозиторієм Git у Visual Studio 2026? Для чого призначений файл .gitignore у проєкті C++?
Тема 2. Типи, операції, керування
- Які фундаментальні типи даних має мова C++? Від чого залежать їхні розміри та діапазони значень?
- Поясніть способи ініціалізації змінних у C++, зокрема уніфіковану ініціалізацію у фігурних дужках. Для чого використовують auto, const і constexpr?
- Поясніть неявне та явне перетворення типів у C++. Для чого призначена операція static_cast?
- Які операції мови C++ ви знаєте? Поясніть пріоритет операцій, цілочисельне ділення та операцію тристороннього порівняння
<=>. - Як виводити дані за допомогою std::print і std::println та вводити дані з потоку std::cin? Порівняйте std::print з потоком std::cout.
- Опишіть керувальні конструкції C++: if, switch, цикли for, while, do-while та цикл for для діапазонів.
Тема 3. Функції
- Поясніть оголошення та визначення функції. Що таке прототип функції і навіщо його розміщують у заголовковому файлі?
- Порівняйте способи передавання параметрів у функцію: за значенням, за посиланням і за константним посиланням.
- Що таке параметри за замовчуванням та перевантаження функцій? Як компілятор обирає потрібну функцію?
- Що таке вбудовані функції (inline) та функції constexpr?
- Що таке рекурсія? Наведіть приклад рекурсивної функції та поясніть ризик переповнення стека.
- Як повернути з функції кілька значень за допомогою std::pair, std::tuple або структури та структурованих прив’язок (structured bindings)?
Тема 4. Масиви, рядки, vector
- Поясніть оголошення, ініціалізацію та обхід вбудованих масивів C++. Які їхні недоліки?
- Порівняйте вбудовані масиви, std::array та std::vector.
- Поясніть основні операції класу std::vector: додавання та видалення елементів, розмір і місткість, перерозподіл пам’яті.
- Які основні методи класу std::string використовують для пошуку, порівняння, виділення підрядка та конкатенації?
- Що таке std::string_view? Які переваги дає його використання і які небезпеки виникають через час життя рядка?
- Як виконувати перетворення між рядками та числами (std::to_string, std::stoi, std::format)?
Тема 5. Вказівники та пам’ять
- Що таке вказівник? Поясніть операції взяття адреси та розіменування, нульовий вказівник nullptr.
- Порівняйте вказівники та посилання в C++.
- Поясніть арифметику вказівників та зв’язок між вказівниками й масивами.
- Поясніть розподіл пам’яті програми (стек і купа). Як виділяти та звільняти динамічну пам’ять операціями new і delete?
- Що таке витоки пам’яті, висячі вказівники та подвійне звільнення пам’яті? Як їх виявити?
- Поясніть розумні вказівники std::unique_ptr і std::shared_ptr та функції std::make_unique і std::make_shared.
- Для чого призначений std::weak_ptr? Як він розв’язує проблему циклічних посилань?
Тема 6. Налагодження та помилки
- Які засоби налагодження надає Visual Studio 2026: точки зупинки, покрокове виконання, вікна Autos, Locals, Watch і Call Stack?
- Як працює механізм винятків у C++: throw, try, catch? Що відбувається зі стеком під час генерування винятку?
- Опишіть ієрархію стандартних винятків std::exception. Як створити власний клас винятку?
- Що означає специфікатор noexcept? Які рівні гарантій безпеки винятків ви знаєте?
- Що таке std::expected? Порівняйте обробку помилок через винятки та через std::expected.
- Для чого використовують assert, static_assert та санітайзери (AddressSanitizer)?
Тема 7. Класи та об’єкти
- Що таке клас і об’єкт у C++? Порівняйте ключові слова class і struct.
- Поясніть інкапсуляцію та модифікатори доступу public, private і protected.
- Які види конструкторів існують у C++? Поясніть список ініціалізації членів та делегування конструкторів.
- Що таке деструктор? У якому порядку викликаються конструктори й деструктори об’єктів?
- Що таке константні методи та ключове слово mutable? Для чого використовують вказівник this?
- Що таке статичні поля та методи класу? Як розділити клас на заголовковий файл і файл реалізації?
Тема 8. Копіювання, переміщення, RAII
- Що таке конструктор копіювання та операція присвоєння копіюванням? Коли їх викликає компілятор?
- Порівняйте поверхневе та глибоке копіювання об’єктів, що володіють динамічною пам’яттю.
- Що таке lvalue та rvalue? Поясніть rvalue-посилання та функцію std::move.
- Що таке конструктор переміщення та операція присвоєння переміщенням? Які переваги дає семантика переміщення?
- Що таке ідіома RAII? Наведіть приклади класів стандартної бібліотеки, які її реалізують.
- Поясніть правила нуля, трьох і п’яти. Для чого використовують специфікатори default та delete для спеціальних методів класу?
- Що таке оптимізація повернення значення (RVO) та гарантоване усунення копіювання?
Тема 9. Перевантаження операцій
- Як перевантажити операції для власного класу? Які операції не можна перевантажувати?
- Порівняйте перевантаження операцій методом класу та вільною функцією.
- Що таке дружні функції та дружні класи? Коли їх доцільно використовувати?
- Як перевантажити операції виведення в потік та введення з потоку для власного класу?
- Як перевантажити операцію тристороннього порівняння
<=>та операцію порівняння на рівність? Що генерує компілятор автоматично? - Як перевантажити операції індексування, виклику функції та інкременту для власного класу?
Тема 10. Наслідування та поліморфізм
- Що таке наслідування? Поясніть відкрите, захищене та закрите наслідування.
- У якому порядку викликаються конструктори й деструктори базового та похідного класів? Як викликати конструктор базового класу?
- Що таке віртуальні функції? Поясніть специфікатори override і final.
- Поясніть типову реалізацію динамічного поліморфізму через таблицю віртуальних функцій і вказівник на неї. Чому конкретне компонування об’єкта не є вимогою стандарту?
- Навіщо базовому класу віртуальний деструктор? Що таке зрізання об’єкта (object slicing)?
- Поясніть перетворення в ієрархії класів: static_cast, dynamic_cast та RTTI.
Тема 11. Абстрактні класи, інтерфейси
- Що таке чисто віртуальна функція та абстрактний клас?
- Як реалізувати інтерфейс мовою C++ за допомогою абстрактного класу?
- Що таке множинне наслідування? Які проблеми воно може спричиняти?
- Що таке ромбоподібне наслідування і як його розв’язує віртуальне наслідування?
- Порівняйте наслідування та композицію. Коли слід надавати перевагу композиції?
- Порівняйте динамічний поліморфізм через віртуальні функції та статичний поліморфізм через шаблони.
Тема 12. Шаблони та концепти
- Що таке шаблони функцій? Як відбувається виведення аргументів шаблону та інстанціювання?
- Що таке шаблони класів? Поясніть параметри шаблону, що не є типами, та значення за замовчуванням.
- Що таке спеціалізація шаблонів? Порівняйте повну та часткову спеціалізацію.
- Чому визначення шаблонів зазвичай розміщують у заголовкових файлах?
- Що таке концепти (concepts)? Як обмежити параметри шаблону за допомогою requires?
- Наведіть приклади стандартних концептів (std::integral, std::same_as, std::totally_ordered) та створіть власний концепт.
- Що таке шаблони зі змінною кількістю параметрів (variadic templates)?
Тема 13. Контейнери
- Які групи контейнерів має стандартна бібліотека C++? Поясніть їхнє призначення.
- Порівняйте послідовні контейнери vector, deque та list за швидкодією основних операцій.
- Поясніть асоціативні контейнери std::set і std::map. Які гарантії порядку й складності вони надають та які структури даних зазвичай використовує реалізація?
- Поясніть невпорядковані контейнери std::unordered_set і std::unordered_map. Що таке хеш-функція?
- Порівняйте методи insert, emplace і
operator[]для додавання елементів до std::map. - Що таке адаптери контейнерів std::stack, std::queue і std::priority_queue?
Тема 14. Ітератори, алгоритми, ranges
- Що таке ітератори? Поясніть категорії ітераторів.
- Коли ітератори стають недійсними? Наведіть приклади для std::vector.
- Поясніть основні алгоритми стандартної бібліотеки: std::sort, std::find_if, std::transform, std::accumulate.
- Що таке лямбда-вирази? Поясніть список захоплення за значенням і за посиланням.
- Що таке бібліотека діапазонів (ranges)? Порівняйте алгоритми std::ranges з класичними алгоритмами.
- Поясніть подання діапазонів (views) std::views::filter, std::views::transform та їхнє ліниве обчислення.
- Для чого призначені std::function та функціональні об’єкти?
Тема 15. Потоки та файли
- Опишіть ієрархію потоків введення-виведення C++: istream, ostream, fstream, stringstream.
- Як читати та записувати текстові файли за допомогою std::ifstream і std::ofstream? Як перевірити стан потоку?
- Як працювати з двійковими файлами: режими відкриття, методи read, write, seekg і tellg?
- Як форматувати дані за допомогою std::format і маніпуляторів потоків?
- Які можливості надає бібліотека std::filesystem для роботи з шляхами, файлами та каталогами?
- Як обробляти помилки введення-виведення та гарантувати закриття файлів?
Тема 16. Модулі та C++26
- Як організувати багатофайловий проєкт C++: заголовкові файли, файли реалізації, захист від повторного включення?
- Поясніть правило одного визначення (ODR) та роль ключових слів extern, static та inline.
- Що таке модулі C++? Поясніть оголошення export module та import.
- Порівняйте модулі та заголовкові файли. Як підключити стандартну бібліотеку командою import std?
- Як створювати та використовувати статичні й динамічні бібліотеки у Visual Studio 2026?
- Поясніть призначення можливостей C++26: рефлексії, контрактів і засобів std::execution. Як відрізнити специфікацію від підтримки конкретним компілятором та бібліотекою і перевірити доступність перед використанням?