Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsiyi_C_II_sem.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.52 Mб
Скачать

Лекція 3

Структури

Припустимо, вам необхідно зберігати інформацію про баскетболіста. Ви хочете зберігати його ім'я, зарплату, зріст, вагу, середню результативність, відсоток влучень, результативних передач і т.п. Вам знадобиться деяка форма даних, яка могла б зберігати всю цю інформацію як єдине ціле. Масив тут не підійде. Хоча масив може зберігати кілька елементів, але всі вони повинні бути одного типу. Тобто один масив може зберігати 20 цілих чисел, інший - 10 чисел з плаваючою точкою, проте масив не може зберігати цілі значення в одних елементах і значення з плаваючою точкою - в інших.

Задовольнити вашу потребу в спільному зберіганні всієї інформації про баскетболіста може структура C++. Структура - більш універсальна форма даних, ніж масив, тому що одна структура може зберігати елементи більш ніж одного типу. Це дозволяє уніфікувати подання даних за рахунок збереження всієї інформації, пов'язаної з баскетболістом, в одній змінній типу структури. Якщо ви хочете відслідковувати інформацію про цілу команду, то можете скористатися масивом структур. Тип структури - це ще й сходинка до підкорення бастіону об'єктно-орієнтованого програмування C++ - класу. Вивчення структур наблизить вас до серця ООП на мові C++.

Структура – це визначений користувачем тип з оголошенням, що описує властивості даних типу. Після визначення типу можна створювати змінні цього типу. Тобто створення структури - процес, що складається з двох частин. Спочатку визначається опис структури, в якому перераховуються і називаються типи даних, що зберігаються в структурі. Потім створюються структурні змінні, або, інакше кажучи, структурні об'єкти даних, які слідують за планом, заданим оголошенням.

Наприклад, припустимо, що компанія Bloataire, Inc. бажає створити тип даних, що описує лінійку її продуктів - різного роду надувних предметів. Зокрема, тип повинен включати найменування продукту, його обсяг в кубічних футах, а також роздрібну ціну. Ось опис структури, що відповідає цим потребам:

Ключове слово struct вказує на те, що цей код визначає план структури. Ідентифікатор inflatable - ім'я, або дескриптор, цієї форми, тобто ім'я нового типу. Таким чином, тепер можна створювати змінні типу inflatable точно так само, як створюються змінні типу char або int. Далі між фігурними дужками знаходиться список типів даних, які міститимуться в структурі. Кожен елемент списку - це оператор оголошення. Тут допускається використовувати будь-які типи C++, включаючи масиви та інші структури. У цьому прикладі застосовується масив char, який підходить для зберігання рядка, потім йде один елемент типу float і один - типу double. Кожен індивідуальний елемент у списку називається членом структури, так що структура inflatable має три члена (мал. 5). Висловлюючись коротко, визначення структури описує характеристики типу - в даному випадку типу inflatable.

Мал. 5. Частини опису структури

Після визначення структури можна створювати змінні цього типу:

Якщо ви знайомі зі структурами в мові С, то відзначите (можливо, із задоволенням), що C++ дозволяє відкинути ключове слово struct при оголошенні структурних змінних:

У C++ дескриптор структури використовується в точності як ім'я фундаментального типу. Ця зміна підкреслює, що оголошення структури визначає новий тип. Крім того, воно виключає пропуск слова struct зі списку причин видачі повідомлень про помилки компілятором.

За умови, що змінна hat має тип inflatable, для доступу до її окремих членів використовується операція належності або членства (.).

Наприклад, hat.volume посилається на член структури з ім’ям volume, a hat.price - на член з ім’ям price. Аналогічно, vincent.price - це член price змінної vincent. Коротше кажучи, імена членів дозволяють посилатися на члени структур майже так само, як індекси - на елементи масивів. Оскільки член price оголошений як double, члени hat.price і vincent.price є еквівалентами змінним типу double і можуть бути використані точно так само, як будь-яка інша змінна типу double. Коротше кажучи, hat є структурою, але hat.price відноситься до типу double. До речі, метод, застосовуваний для доступу до функції-члену класу на кшталт cin.getline() походить від методу доступу до змінних-членів структури, таким як vincent.price.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]