Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
відповіді ооп( більше половини).docx
Скачиваний:
8
Добавлен:
21.09.2019
Размер:
165.75 Кб
Скачать

33. Опишіть такі аґреґатні типи даних, як структура і об’єднання, їх основні відмінності.

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

Зауваження. В C + + структури містять в собі не тільки дані, але і код і відносяться до засобів об'єктно-орієнтованого програмування. В даному розділі об'єктні властивості структур не розглядаються.Приклад. Оголошення структури, яка зберігає відомості про журнал: назва, рік, номер.

struct magazin

{char * tittle;

int year;

int number;

};

Нижче визначена і инициализирована мінлива структура

mag.magazin mag = {"Nature", 3, 1995);

Доступ до елементів структури здійснюється по складеному імені:

імя_структури.імя_елемента.

Тут точка позначає оператор вибору, а складене ім'я дає ще один приклад адресного вираження.

Якщо є вказівник на структуру, то доступ до елемента возмо ¬ жен за допомогою операції непрямого вибору:

указатель_на_структуру-> імя_елемента.

Стрілка, складена з двох символів, позначає оператор непрямого вибору.

Структури можна привласнювати, передавати у вигляді параметрів функції, повертати у вигляді результату функції. Структури не можна порівнювати операціями ==, / =, <,> і т.п. Структури, як і масиви, можна ініціалізувати списком значень.

Приклад. Робота зі структурою magazin.

/ / Оголошення і ініціалізація

magazin * pm, m = ("Nature", 2000, 4};

/ / Доступ до елементівcout «m.tittle« "" «m.number« endl;

/ / Одна структура у вільній пам'яті

* Pm = new magazin;

* Pm = m;pm-> tittle = "Nature";

delete pm;

/ / Масив структур у вільній пам'яті

pm = new magazin [10];

pm [0]. tittle = "Природа";

delete [] pm;

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

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

  • Об'єднання визначає шаблон, за допомогою якого програми далі оголошують змінні.

  • Для звернення до певного елементу об'єднання ваші програми використовують оператор C + + точку.

  • Щоб змінити значення елемента об'єднання всередині функції, ваша програма повинна передати змінну об'єднання у функцію за допомогою адреси.

  • Анонімне об'єднання є об'єднання, у якого немає імені (тега).

Як ви дізнаєтеся, об'єднання дуже схожі на структури C + +, проте спосіб, за допомогою якого C + + зберігає об'єднання, відрізняється від способу, за допомогою якого C + + зберігає структури.

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

union distance

{

int miles;

long meters;

};

Як і у випадку зі структурою, опис об'єднання не розподіляє пам'ять. Натомість опис надає шаблон для майбутнього оголошення змінних. Щоб оголосити змінну об'єднання, ви можете використовувати будь-який з таких форматів:

union distance

{

union distance

{

int miles; int miles;

long meters; long meters;

} japan, germany, franee;

};

distance japan, germany, franee;

Як бачите, дане об'єднання містить два елементи: miles і meters. Ці оголошення створюють змінні, які дозволяють вам зберігати відстані до зазначених країн. Як і для структури, ваша програма може присвоїти значення будь-якого елементу. Однак на відміну від структури значення може бути присвоєно лише одному елементу в кожен момент часу. Коли ви оголошуєте об'єднання, компілятор C + + розподіляє пам'ять для зберігання самого великого елемента об'єднання. У разі об'єднання distance компілятор розподіляє достатньо пам'яті для зберігання значення типу long