
- •Лекція 1
- •Зауваження до програми
- •Правила ініціалізації масивів
- •Лекція 2
- •Конкатенація рядкових літералів
- •Використання рядків у масивах
- •Зауваження до програми
- •Ризики, пов'язані з введенням рядків
- •Читання введення по рядках
- •Введення, орієнтоване на рядки за допомогою getline()
- •Введення, орієнтоване на рядки за допомогою get()
- •Змішування рядкового та числового вводу
- •Клас string
- •Лекція 3
- •Використання структур в програмах
- •Зауваження до програми
- •Чи може структура містити член типу string?
- •Інші властивості структур
- •Масиви структур
- •Лекція 4
- •Перерахування
- •Встановлення значень нумераторам
- •Діапазони значень нумераторів
- •Лекція 5
- •Оголошення та ініціалізація вказівників
- •Небезпека пов’язана з вказівниками
Інші властивості структур
У C++ користувача типи зроблені, наскільки можливо, схожими на вбудовані типи. Наприклад, структуру можна передавати як аргумент функції, а функція може використовувати структуру в якості значення, що повертається. Також можна застосовувати операцію присвоювання (=), щоб привласнити одну структуру іншій того ж самого типу. Ця операція встановлює значення кожного члена однієї структури рівним значенню відповідного члена іншої структури, навіть якщо член є масивом. Такий тип присвоювання називається почленним привласненням. Наведемо невеликий приклад присвоювання структур в лістингу 10:
Приклад виведення програми:
Як бачите, почленне присвоювання працює, і всі члени структури choice отримали відповідні значення членів структури bouquet.
Можна комбінувати визначення форми структури зі створенням структурних змінних. Щоб зробити це, відразу після закриваючої фігурної дужки потрібно вказати ім'я змінної або декількох змінних:
Можна навіть ініціалізувати створену змінну, як показано нижче:
Однак відділення визначення структури від оголошень змінних зазвичай підвищує читабельність програми.
Ще один трюк, який можна зробити зі структурою - створити структуру без імені типу. При визначенні ім'я дескриптора опускається і відразу слідує ім'я змінної:
Це створює одну структурну змінну з ім’ям position. До її членів можна звертатися через операцію точки, як в position.х, але ніякого загального імені для типу не оголошується. Ви не зможете згодом створювати інші змінні того ж типу.
Крім того факту, що програма C++ може використовувати дескриптор структури в якості імені типу, всі інші характеристики структур притаманні як структурам С, так і структурам C++, не рахуючи змін, що з'явилися в С++ 11. Однак структури C++ рухаються ще далі. На відміну від структур С, наприклад, структури C++ можуть включати в себе функції-члени на додаток до змінних-членів. Однак ці більш розвинені засоби частіше використовуються з класами, ніж зі структурами.
Масиви структур
Структура inflatable містить масив (з ім’ям name). Також можна створювати масиви, елементами яких є структури. Підхід тут в точності збігається з таким для масивів фундаментальних типів. Наприклад, щоб створити масив з 100 структур inflatable, можна вчинити так:
Це оголошення робить gifts масивом структур inflatable. В результаті кожен елемент масиву, такий як gifts[0] або gifts[99], є об'єктом типу inflatable і може бути використаний з операцією членства:
Майте на увазі, що сам по собі gifts є масивом, а не структурою, тому конструкція на зразок gifts.price - некоректна.
Для ініціалізації масиву структур комбінується правило ініціалізації масивів (вкладений у фігурні дужки список значень, розділених комами, для кожного елемента) з правилом структур (вкладений у фігурні дужки список значень, розділених комами, для кожного члена).
Оскільки кожен елемент масиву є структурою, його значення представляється ініціалізацією структури. Таким чином, ми отримуємо наступну конструкцію:
Як звичайно, можете форматувати все це на свій розсуд. Наприклад, обидві ініціалізації можуть бути розташовані в одному рядку або ж ініціалізація кожного окремого члена структури може займати окремий рядок.
У лістингу 11 показано приклад використання масиву структур. Зверніть увагу, що оскільки guests - масив inflatable, типом елемента guests[0] є inflatable, тому ви можете використовувати його з операцією точки для доступу до членів структури inflatable.
Лістинг 11. arrstruct.cpp
Приклад виконання програми: