1-1 Программирование С++ / html / modules / 021 / content / content1
.htmlІнформатика — Теорія — Застосування об'єднань Автори
|
Контакти
|
Підсистема допомоги
|
Методичні вказівки
|
Анотація
|
Назад
ІнформатикаОб'єднання : Застосування об'єднаньЗміст курсу
Вступ
Теорія
Застосування об'єднань
Анонімне об'єднання
Висновки
Версія для друку
Застосування об'єднань Об'єднання дозволяють в різні моменти часу зберігати в одному об'єкті значення різного типу. В процесі оголошення об'єднання з ним асоціюється набір типів, які можуть зберігатися в даному об'єднанні. В кожний момент часу об'єднання може зберігати значення тільки одного типу з набору. Контроль за тим, значення якого типу зберігається в даний момент в об'єднанні покладається на програміста.Синтаксис :union [ім'я_об'єднання] { тип1 елемент1; тип2 елемент2; ........................ типN елементN;} [список описів];
Пам'ять, яка виділяється під змінну типу об'єднання, визначається розміром найбільш довгого з елементів об'єднання. Всі елементи об'єднання розміщуються в одній і тій же області пам'яті з однієї й тієї ж адреси. Значення поточного елемента об'єднання втрачається, коли іншому елементу об'єднання присвоюється значення.
Як і у випадку зі структурою, опис об'єднання не розподіляє пам'ять. Замість цього опис надає шаблон для майбутнього оголошення змінних. Щоб оголосити змінну об'єднання, можна використовувати кожен з наступних форматів:
union distance
{ int miles;
long meters;
} japan, germany, franсe;
Дане об'єднання містить два елементи: miles і meters. Ці оголошення створюють змінні, які дозволяють зберігати відстані до зазначених країн. Як і для структури, в програмі можна привласнити значення будь-якому елементу. Однак на відміну від структури значення може бути привласнено тільки одному елементу в кожний момент часу. При оголошенні об'єднання, компілятор C++ розподіляє пам'ять для зберігання найбільшого елемента об'єднання. У випадку об'єднання distance компілятор розподіляє досить пам'яті для зберігання значення типу long. Припустимо, що в програмі привласнюється значення елементу miles, як показано нижче:
japan.miles = 12123;.
Якщо далі в програмі привласнюватиметься значення елементу meters, значення, привласнене елементу miles, губиться.
Ініціювати об'єднання при його оголошенні можна тільки завданням значення першого елемента об'єднання.
Наприклад:
union unionA
{
char ch1;
float f1;
} a1={ 'M' };.
Приклад 1. Наступна програма ілюструє використання об'єднання distance. Спочатку програма привласнює значення елементу miles і виводить це значення. Потім програма привласнює значення елементу meters. При цьому значення елемента miles губиться:
#include <iostream.h>
void main ()
{ union distance
{
int miles;
long meters;
} walk;
walk.miles = 5;
cout << "Пройдена відстань у милях " << walk.miles << endl;
walk.meters = 10000;
cout << "Пройдена відстань у метрах " << walk.meters << endl;
}
Програма звертається до елементів об'єднання за допомогою крапки, аналогічний запис використовувався при звертанні до елементів структури.
© 2008 ХНУРЭ, Інформатики, Сінельнікова Т.Ф., informatika@kture.Kharkov.uaРозроблено за допомогою LERSUS