Birlashmalar (union) - Texnologiyalar vazirligi muhammad al xorazmiy nomidagi toshkent axborot

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.
C++ dasturlash tillarida, birlashmalar (union) ma'lumotlarni bir qatorda saqlash
uchun ishlatiladi. Birlashma, bir nechta turdagi ma'lumotlar to'plamini (masalan, xat,
son, float, va hokazo) bir qatorda saqlash imkonini beradi. Bunda, birlashma ichidagi
har bir element o'z joyda birinchi elementning qiymatini saqlayadi.
Birlashma, ma'lumotlar strukturasiga o'xshash ko'rinishda bo'ladi, lekin ularning
asosiy farqi, birlashmada bir vaqtning o'zida faqat
bir element qiymati mavjud
bo'lishi va o'zi qaysi elementni saqlashini o'z ichiga oladi.
Quyidagi C++ kodida birlashma namunasi ko'rsatilgan:
#include
using namespace std;
union Ma'lumotlar {
int butun_son;
float o'nlik_son;
char harf;
};
int main() {
Ma'lumotlar m;
m.butun_son = 10;
cout << "Butun son: " << m.butun_son << endl;
m.o'nlik_son = 15.75;
cout << "O'nlik son: " << m.o'nlik_son << endl;
m.harf = 'A';
cout << "Harf: " << m.harf << endl;
cout << "Butun son: " << m.butun_son << endl; // Bu erda qiymat o'zgarishi
ko'rinmaydi
cout << "O'nlik son: " << m.o'nlik_son << endl; // Bu erda ham qiymat
o'zgarishi ko'rinmaydi, sababi, bir xil xotirada joylashgan
cout << "Harf: " << m.harf << endl;
return 0;
}
```
Bu misolda, `Ma'lumotlar` nomli birlashma yaratilgan va unda `int`, `float`, va
`char` turdagi elementlar mavjud. Birlashma ichidagi har bir element birinchi
elementning joylashgan joyida ma'lumotlarni saqlaydi. Bu esa,
birlashmada bir
elementga qiymat berilganda, boshqa elementlar o'zgartirilgan
holatda ham
o'zgarishi mumkin.
Birlashmalarni foydalanish paytida ehtiyot bo'lish kerak, chunki ular bilan ishlash
paytida ma'lumotlar turi va ularga murojaat qilish tartibiga ehtiyot bo'lishingiz
kerak. Çünki birlashma o'z ichida faqat bir qatorda ma'lumot saqlaydi va ma'lumotlar
qaysi turda saqlanganini aniqlashda xatoliklar paydo bo'lishi mumkin.
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;
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;