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

Розділ 12. Структури

12.1. Загальна характеристика структури

Структури дають можливість групувати дані і працювати з цими даними як із єдиним цілим.

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

Для визначення структури використовується синтаксис:

struct [тег структури]

{

в

} поля структури

изначення члена структури;

визначення члена структури;

} [одна або декілька змінних-структур];

тег-ім’я структури.

Приклад структури з інформацією про компакт-диски:

struct cd_info

{

char title [25]; //назва

char artist [28]; //виконавець

int num_song; //число пісень

float price; //вартість

char date_bought [8]; //дата покупки

} cd1, cd2, cd3;

Тут описані три структурні змінні: cd1, cd2, cd3;

Існує два засоби ініціалізації структур:

  • при оголошенні;

  • окремо в тілі програми.

Приклад 1. Ініціалізація при оголошенні

struct cd_info

{

char title[25];

char artist[28];

int num_song;

float price;

char date_bought[8];

} cd1=

{

"Red Moon Men",

"Пугачова", 12, 20.55,

"02/13/98"

};

Приклад 2. Присвоювання в тілі програми.

#include <iostream>

using namespace std;

struct cd_info

{

char title [25];

char artist [28];

int num_song;

float price;

char date_bought [8];

};

void main()

{

cd_info cd1;

strcpy(cd1.title, "Red Moon Men");

cd1.num_song = 12;

cd1.price = 11.95f;

strcpy(cd1.artist, "Пугачова");

cout << "Title: " << cd1.title << "\n";

cout << "Artist: " << cd1.artist << "\n";

cout << "Number of songs: " << cd1.num_song<< "\n";

cout << "Price: " << cd1.price << "\n";

}

Як очевидно з прикладу до полів структури можна звертатися, вказуючи ім’я змінної-структури, ім’я поля та розділяючи ці імена точкою.

У загальному вигляді:

struct bb

{

int field_1;

char field_2;

} c={10,'A'}, a={20,'B'};

int value1 = c.field_1; //10

char value2 = a.field_2; //B

Якщо змінна ptr визначена як вказівка на структуру, то для доступу до полів структури використовується операція "–>". Перед цим необхідно створити об’єкт структури, використовуючи оператор new, а в кінці видалити його за допомогою delete.

Наприклад:

bb *ptr = new bb;

ptr->field_1 = 10;

ptr->field_2 = 'A';

..........................

delete bb;

Оператор ptr->field_1 еквівалентний виразу (*ptr).field_1.

Приведемо приклад роботи з комплексними числами:

#define COMPLEX struct complex_type

COMPLEX

{

float real;

float image;

};

Операція додавання С1 і С2 для одержання С3.

#define COMPLEX struct complex_type

COMPLEX

{

float real;

float image;

};

COMPLEX C1, C2, C3;

C1.real = 1;

C1.image = 2.5f;

C2.real = 2;

C2.image = 3;

C3.real = C1.real + C2.real; //3

C3.image = C1.image + C2.image; //5.5

або

COMPLEX* C1, *C2, *C3;

C1 = new COMPLEX;

C2 = new COMPLEX;

C3 = new COMPLEX;

C1->real = 1;

C1->image = 2.5f;

C2->real = 2;

C2->image = 3;

C3->real = C1->real + C2->real; //3

C3->image = C1->image + C2->image; //5.5

..................................

delete C1;

delete C2;

delete C3;

Структури можуть бути вкладеними, тобто одним із полів структури може бути інша структура.

Приклад:

#include <iostream>

using namespace std;

struct address_info

{

char addr[25]; //Інформація про адресу

char state[20];

};

struct add

{

char name[25];

address_info *address;

double zarp;

};

void main()

{

add t;

t.address = new address_info;

cin >> t.zarp;

cin >>t.name;

cin >>t.address->state;

cin >>t.address->addr;

delete t.address;

}

Вкладена структура має вигляд:

Резюме:

Структури дозволяють групувати дані більш гнучким чином, ніж масиви. Вони можуть містити елементи різноманітних типів даних. Ініціалізувати структури можна двома засобами: під час оголошення, або за допомогою операторів «точка»(.) або "–>" у тілі програми. Структури аналогічні записам бази даних, а їхні елементи – полям записів.