Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






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

Зауваження. В 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

 


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал