union, structure के समान ही है , अर्थात similar और di-similar data -types का collection.
लेकिन structure में जहां प्रत्येक member memory address भिन्न होता है, union अपने सभी members को memory में एक ही जगह space देता है, जिसके कारण वे एक दूसरे को प्रभावित करते हैं,
आप इसे इस तरह से समझ सकते हैं कि, जब आप पहले value को input करने के बाद दूसरे value को input करते हैं, तो दूसरा input पहले input को मिटा देता है, इस तरह इसमें केवल last input ही store होता है, और जब हम इन values को print करते हैं, erase हुई values की जगह हमें garbage values प्राप्त होते हैं। केवल last में input की गयी value ही accurate प्राप्त हो पाती है।
नीचे दिए गए diagram में, आप देख सकते हैं कि union अपने member के लिए memory में एक ही जगह space लेता है अर्थात, सभी member का memory address एक ही होता है।
इसे structure के diagram से compare करें- structure in C++
एक ही memory address होने के कारण, ये stored values एक दूसरे को प्रभावित करते हैं ।
Declaration of union-members in C++
union का declaration structure – declaration जैसा ही है आप इसे नीचे दिए गए syntax के साथ समझ सकते हैं-
union union_name {
data member1;
data member2;
data member n;
};
जहां एक union-name एक identifier है जो optional है और data member, data types को दर्शाता है।
उदाहरण,
union book {
int sr;
char name[10];
float price;
};
accessing of union member in C++
union के members को dot operator के साथ structure -variable की तरह union -variable से access किया जाता है।
यहाँ union member को access करने के लिए syntax दिया गया है-
union_name.member_name;
आइये इसे एक उदाहरण के साथ समझते हैं-
Example
union book {
int sr;
char name[10];
float price;
}vr;
अब, union के इन data -members को निम्नानुसार access किया जायेगा –
vr.sr;
vr.name;
vr.price;
इसका program नीचे दिया गया है –
union program in C++
#include<iostream.h>
#include<conio.h>
union book{
int sr;
char name[20];
float price;
};
void main()
{
book vr;
clrscr();
cout<<"Enter Serial No.: ";
cin>>vr.sr;
cout<<"Enter Book Name : ";
gets(vr.name);
cout<<"Enter Book Price: ";
cin>>vr.price;
cout<<"\nSerial No.: "<<vr.sr; // garbage value will be print
cout<<"\nBook Name : "<<vr.name; // garbage value will be print
cout<<"\nBook Price: "<<vr.price; // accurate value be print
getch();
}
OUTPUT
Serial No.: 101
Book Name : Science
Book Price: 350.5
Serial No.: 16384
Book Name :
Book Price: 350.5
यदि हम चाहें, तो हम structure की तरह ही arrow -operator (->) का प्रयोग करके union के members access कर सकते हैं। इसके लिए structure with pointer को देखें।
union memory size in C++
क्योंकि union के सभी data-member memory address एक ही होता है, इसलिए यह memory में उस data -member का size लेता है जिस data member का size अन्य data-member से अधिक होता है।
union {
int no;
char name[20],
float price;
};
इसमें data -member name का size अन्य member (sr , price ) से अधिक है, इसलिए memory में एक union का size (char × 20 = 20 byte ) 20byte होगा।
हम इसे नीचे दिए गए program की सहायता से समझ सकते हैं, जिसमें हमने sizeof operator का प्रयोग करके union का size ज्ञात किया है-
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
union { // union declaration in global
int sr;
char name[20];
float price;
}vr;
void main()
{
clrscr();
cout<<"Size of union variable : "<<sizeof(vr)<<" byte";
getch();
}
OUTPUT
Size of union variable : 20 byte
एक structure memory में space अलग तरीके से reserve करता है। इसे देखें
anonymous union in C++
जब हम किसी नाम के बिना ही एक union को declare करते हैं, तो इसे anonymous union कहा जाता है।
इसमें union members को सीधे उनके नाम से access किया जाता है। ध्यान दें कि इस प्रकार के union को void main() के भीतर declare किया जाता है।
void main()
{
union {
........
........
}
........
}
आप इसे नीचे दिए गए program की मदद से समझ सकते हैं-
#include<iostream.h>
#include<conio.h>
void main()
{
union { //declare union in local
int sr;
char name[20];
float price;
};
clrscr();
cout<<"Serial No.: ";
cin>>sr;
cout<<"Book Name : ";
cin>>name;
cout<<"Book Price: ";
cin>>price;
cout<<"\nSerial No.: "<<sr; // garbage value print
cout<<"\nBook Name : "<<name; //garbage value print
cout<<"\nBook Price: "<<price; // accurate value print
getch();
}
OUTPUT
Serial No.: 101
Book Name : Science
Book Price: 350.5
Serial No.: 16384
Book Name :
Book Price: 350.5
anonymous union की तरह anonymous structure भी संभव है परन्तु दोनों का implementation एक दूसरे से भिन्न होगा।
similarities between structure and union in C++ Hindi
- union और structure दोनों user defined data type हैं।
- union-name और structure-name दोनों ही identifier हैं, यानी किसी कोई भी उपयुक्त नाम (reserve keyword को छोड़कर)।
- structure की तरह, union में data type को parentheses bracket के भीतर declare किया जाता है। जिन्हे members कहा जाता है और प्रत्येक member एक semicolon से terminate होता है।
- union और structure दोनों के members, data types और function दोनों प्रकार के हो सकते हैं।
- दोनों के data members को उनके member name के साथ उनके variable से access किया जाता है-
variable-name.member-name;
- दोनों के एक से अधिक variable declare किए जा सकते हैं।
structure-name.variable1, variable2, variable3;
union-name.variable1, variable2, variable3;
- दोनों memory में space केवल variable declaration के बाद लेते हैं , अर्थात member declaration के दौरान memory reserve नहीं होती।
- दोनों को globally और locally दोनों प्रकार से declare कर सकते हैं।
Difference between union and structure in C++ Hindi
- जैसा कि हम जानते हैं, दोनों में, memory space केवल variable declaration के बाद reserve होती है, लेकिन जहां structure memory में अपने सभी members को एक अलग memory location प्रदान करता है, वहीं union, members को एक ही memory location देता है।
- union में, second input पहले input को erase कर देता है, अर्थात last input ही memory में store होता है जबकि structure में अलग-अलग memory address होने के कारण ऐसा कुछ भी नहीं होता।
- structure का memory size इसके data member के size का total होता है जबकि union का memory size अपने data member के उस member पर निर्भर करता है जो अन्य member से size में ज्यादा होता है।
- जैसा कि हम जानते हैं, दोनों में, memory space केवल variable declaration के बाद reserve होती है, लेकिन जहां structure memory में अपने सभी members को एक अलग memory location प्रदान करता है, वहीं union, members को एक ही memory location देता है।
- union में, second input पहले input को erase कर देता है, अर्थात last input ही memory में store होता है जबकि structure में अलग-अलग memory address होने के कारण ऐसा कुछ भी नहीं होता।
- structure का memory size इसके data member के size का total होता है जबकि union का memory size अपने data member के उस member पर निर्भर करता है जो अन्य member से size में ज्यादा होता है।
- local में(inside void main function ) declare union के members को सीधे members -name से ही access किया जाता है (जिसे anonymous union कहते हैं ) जबकि local हो या global दोनों में declare structure के members को access करने के लिए structure -variable का प्रयोग होता है।
previous – Structure in C++
next-Function in C++