Інформатика
Об'єднання : Застосування об'єднань
 

Застосування об'єднань

     Об'єднання дозволяють в різні моменти часу зберігати в одному об'єкті значення різного типу. В процесі оголошення об'єднання з ним асоціюється набір типів, які можуть зберігатися в даному об'єднанні. В кожний момент часу об'єднання може зберігати значення тільки одного типу з набору. Контроль за тим, значення якого типу зберігається в даний момент в об'єднанні покладається на програміста.
Синтаксис :
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