Теоретичний матеріал

 

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

Окремі дані структури називаються елементами або полями. Елементи однієї і тієї ж структури повинні мати унікальні імена, але дві різні структури можуть містити не конфліктуючі елементи з однаковими іменами

Відповідно до синтаксису мови опис структури починається із службового слова struct, услід за яким поміщається вибране користувачем ім'я типу. Елементи, що входять в структуру, поміщається у фігурні дужки, услід за якими ставиться крапка з комою елементи структури можуть бути як базових, так і похідних типів.

Опис структури не резервує ніякого простору в пам'яті воно тільки створює новий тип даних, який може використовуватися для визначення змінних. У структурі обов'язково повинен бути вказаний хоч би один компонент.

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

 

struct Student

{

char Name[20]; // Ім'я

char Address[30]; // Адреса

int Age; // Вік

double Rating; // Успішність

};

 

Ключове слово struct указує на те, що код визначає формат структури. Ідентифікатор Student - назва, або тег, для цього формату. Таким чином, тепер можна створювати змінні типу Student так само, як змінні будь-якого базового типа, наприклад int або char. Між фігурними дужками знаходиться список типів заданих даних. Кожен елемент списку - це оператор визначення. Тут можна використовувати будь-який з типів даних С++, включаючи масиви і інші структури. В даному прикладі використовуються два масиви типу char, зручні для збереження рядків з атрибутами «Ім'я» і «Адреса», а також int і double - для зберігання відповідних числових значень.

Тепер, коли структура описана, її можна використовувати. Спочатку потрібно створити (визначити) екземпляр структури. Це виглядає таким чином:

Student BestStudent;

Для доступу до елементів структури використовуються операції доступу до елементів: операція крапка (.) і операція стрільця (->).

Операція стрільця забезпечує доступ до елементу структури через покажчик на об'єкт (у даній роботі цей тип доступу не використовується)..

Операція крапка звертається до елементу структури на ім'я об'єкту (екземпляра структури) або по посиланню на об'єкт. Наприклад:

 

strcpy(BestStudent.Name, "ІВАНОВА");

strcpy(BestStudent.Address, "ПР. ЛЕНІНА, 9-А");

BestStudent.Age = 17;

BestStudent.Rating = 10.57;

 

У даному фрагменті програми відбувається роздільна ініціалізація елементів-даних екземпляра BestStudent структури Student. Причому, для запису у відповідні поля рядків символів позначають ім'я (прізвище) і адресу студента використовується функція strcpy( ).

Оператор

strcpy(BestStudent.Name, "ІВАНОВА");

забезпечує виклик цієї функції, звернення до поля Name екземпляра BestStudent і запис в це поле рядка, "ІВАНОВА".

Оператор

BestStudent.Age = 17;

ініціалізував елемент - даних з ім'ям Age (вік) значенням 17.

При необхідності можлива одночасна ініціалізація відразу всіх елементів-даних знов створеного екземпляра структури. Наприклад:

 

BestStudent = {"ІВАНОВА", "ПР. ЛЕНІНА 9-А", 17, 10.57};

 

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

// Програма 1

// Елементарна обробка полів структур

#include <iostream>

#include <string.h> // Для роботи з функцією strcpy();

struct Student

{

char Name[20]; // Ім'я

char Address[30]; // Адреса

int Age; // Вік

double Rating; // Успішність

} BestStudent;

 

int main()

{

BestStudent = {"ІВАНОВА", "ПР. ЛЕНІНА 9-А", 17, 10.57};

// Висновок на друк вмісту полів екземпляра структури

cout << " СТУДЕНТ Ф_ТА ЭІ \n";

cout << "\n ИМЯ:\t" << BestStudent.Name

<< "\n Адрес:\t" << BestStudent.Address

<< "\n Возраст:\t" << BestStudent.Age

<< "\n Успеваемость:\t" << BestStudent.Rating << endl;

return 0;

}