26
1.3.6. Birlashmalar (union)
Birlashmalar xuddi strukturalarga o„xshash
toifa hisoblanadi, farqi shuki,
birlashmalarda bir vaqtning o„zida faqat uning bitta elementigagina murojaat qilish
mumkin. Birlashma toifasi quyidagicha aniqlanadi:
union { 1-elementni tavsiflash;
...
n-elementni tavsiflash;
};
Birlashmalarning
asosiy xususiyati shuki, e‟lon qilingan har bir element
uchun xotiraning bitta hududi ajratiladi, ya‟ni ular bir-birini qoplaydi.
Bu yerda
xotiraning shu qismiga istalgan element bilan murojaat qilsa bo„ladi, lekin buning
uchun element shunday tanlanishi kerakki, olinadigan natija ma‟noga ega bo„lishi
kerak. Birlashmaning elementiga murojaat xuddi struktura elementiga murojaat
kabi
amalga
oshiriladi.
Birlashmalar
qo„llaniladigan
xotira
obyektini
initsializatsiya qilish maqsadida ishlatiladi, agarda har
bir murojaat vaqtida bir
qancha obyektlardan faqat bittasi faollashtirilsa.
Birlashma toifasidagi o„zgaruvchi uchun ajratiladigan xotira hajmi ushbu
toifaning eng uzun elementi uchun ketadigan xotira hajmi bilan aniqlanadi. Kichik
uzunlikdagi element ishlatilganda, birlashma toifasidagi o„zgaruvchi
uchun
ajratilgan xotira sohasining ayrim qismi ishlatilmaydi. Birlashmaning barcha
elementi uchun xotiraning bitta adresdan boshlanuvchi bitta sohasi ajratiladi.
Masalan:
union { char fio[30];
char adres[80];
int yoshi;
int telefon; } inform;
union { int ax;
char al[2]; } ua;
27
Birlashma tipidagi inform obyektini ishlatganda qiymat qabul qilgan
elementnigina qayta ishlash mumkin, ya‟ni
masalan
inform.fio
elementiga qiymat
berilgandan keyin boshqa elementlarga murojaat ma‟noga ega emas.
ua
birlashmasi
al
elementining kichik
ua.al[0]
va katta
ua.al[1]
baytlariga
alohida
murojaat qilish mumkin. Birlashma tipiga oid misol ko„rib chiqamiz.
#include
using namespace std;
int main()
{ union Guruh{
int n;
int m;
};
Guruh w;
w.n=12;// w birlashmasining n elementiga qiymat berish
w.m=23; // w birlashmasining m elementiga qiymat berish
cout<
marta m uchun 23 qiymati yozilgani sababli ekranga 23 23 javobi chiqariladi.
system("pause");
}