संरचना और संघ के बीच अंतर

लेखक: Laura McKinney
निर्माण की तारीख: 1 अप्रैल 2021
डेट अपडेट करें: 14 मई 2024
Anonim
संरचना और संघ के बीच अंतर | संरचना बनाम संघ | संरचना और संघ
वीडियो: संरचना और संघ के बीच अंतर | संरचना बनाम संघ | संरचना और संघ

विषय


C ++ कस्टम डेटा बनाने के लिए C भाषा द्वारा प्रदान किए गए सभी पाँच तरीकों की अनुमति देता है। वे पांच तरीके हैं ’संरचना’, ways बिट-फील्ड ’,, यूनियन’, um एन्यूमरेशन ’,। टाइपडिफ’। नीचे दिए गए लेख में हम संरचना और संघ के बीच के अंतर का अध्ययन करने जा रहे हैं। संरचना और संघ दोनों कंटेनर डेटा प्रकार हैं जो किसी भी "प्रकार" के डेटा को पकड़ सकते हैं। संरचना और संघ में अंतर करने वाला एक बड़ा अंतर यह है कि संरचना में इसके प्रत्येक सदस्य के लिए एक अलग मेमोरी स्थान है, जबकि एक यूनियन के सदस्य एक ही मेमोरी स्थान साझा करते हैं।

आइए तुलना चार्ट के साथ संरचना और संघ के बीच अंतर को समझते हैं।

  1. तुलना चार्ट
  2. परिभाषा
  3. मुख्य अंतर
  4. समानताएँ
  5. निष्कर्ष

तुलना चार्ट

तुलना का आधारसंरचनासंघ
बुनियादीअलग स्मृति स्थान संरचना के प्रत्येक सदस्य को आवंटित किया जाता है।यूनियन के सभी सदस्य एक ही मेमोरी लोकेशन साझा करते हैं।
घोषणासंरचना struct_name {
प्रकार 1;
टाइप 2 तत्व;
.
.
} variable1, variable2, ...;
संघ u_name {
प्रकार 1;
टाइप 2 तत्व;
.
.
} variable1, variable2, ...;
कीवर्डstructसंघ
आकारसंरचना का आकार = सभी डेटा सदस्यों के आकार का योग।संघ का आकार = सबसे बड़े सदस्यों का आकार।
स्टोर मूल्यसभी सदस्यों के लिए अलग-अलग मूल्य संग्रहीत करता है।सभी सदस्यों के लिए समान मूल्य रखता है।
समय परएक संरचना संरचना के विभिन्न सदस्यों के विभिन्न मूल्यों को संग्रहीत करती है।एक संघ सभी सदस्यों के लिए एक समय में एक ही मूल्य रखता है।
देखने का तरीकाप्रत्येक मेमोरी लोकेशन को देखने का एकल तरीका प्रदान करें।एक ही मेमोरी लोकेशन देखने के लिए कई तरीके प्रदान करें।
अनाम विशेषताकोई अनाम विशेषता नहीं।अनाम संघ घोषित किया जा सकता है।

संरचना की परिभाषा

संरचना विभिन्न डेटा प्रकारों के चर का एक संग्रह है, जिसे एक सामान्य नाम से संदर्भित किया जाता है। एक संरचना में चर को "सदस्य" कहा जाता है। डिफ़ॉल्ट रूप से, किसी संरचना के सभी सदस्य "सार्वजनिक" होते हैं। जब आप एक संरचना की घोषणा करते हैं, तो आप एक टेम्पलेट बनाते हैं, जिसका उपयोग संरचना ऑब्जेक्ट बनाने के लिए किया जा सकता है, डेटा सदस्यों और सदस्य कार्यों के एक ही संगठन को साझा करना। संरचना की घोषणा हमेशा "संरचना" कीवर्ड से पहले होती है, जो संकलक को बताती है कि एक संरचना घोषित की गई है। एक उदाहरण लेते हैं।


एक उदाहरण लेते हैं।

संरचना कर्मचारी {स्ट्रिंग नाम; string company_name; तार शहर; } Emp1, emp2;

यहां, हम कर्मचारियों की जानकारी संग्रहीत करने के लिए एक संरचना की घोषणा करते हैं। घोषणा एक अर्धविराम द्वारा समाप्त की जाती है, क्योंकि संरचना घोषणा एक बयान है और सी ++ में बयान अर्धविराम द्वारा समाप्त किया जाता है।

एक संरचना को दिया गया नाम "प्रकार" को परिभाषित करता है (उदाहरण के लिए संरचना का नाम "कर्मचारी" है)। इन प्रकारों के चर बनाए जा सकते हैं, जैसा कि ऊपर दिया गया है, हमने दो वेरिएबल 'एम्प 1' और 'एम्पल 2' टाइप "कर्मचारी" बनाए। उपरोक्त उदाहरण में, हमने घोषणा के ठीक बाद एक 'संरचना' चर बनाया; वैकल्पिक रूप से, इसे अलग से बनाया जा सकता है।

संरचना कर्मचारी एम्प 1, एम्प 2; // कीवर्ड संरचना अनिवार्य नहीं है।

एक संरचना चर के सदस्यों को डॉट (।) ऑपरेटर का उपयोग करके आरम्भ किया जा सकता है या पहुँचा जा सकता है।

emp1.name "अशोक" =;

एक संरचना चर में निहित जानकारी को उसी प्रकार के दूसरे संरचना चर को सौंपा जा सकता है जैसे कि अनुसरण।


emp1.name "अशोक" =; emp1.company_name = "Teckpix"; emp1.city = "दिल्ली"; emp2 = emp1; // emp1 से emp2 के सदस्य के मान निर्दिष्ट करना। अदालत <

यहाँ, हमने संरचना वेरिएबल 'एम्प 1' को 'एम्प 2' को सौंपा है, इसलिए 'एम्प 1' अपने सदस्यों के सभी मूल्य को 'epm2' के संबंधित सदस्य को कॉपी करता है।

संरचना चर के सदस्य को फ़ंक्शन में पास किया जा सकता है।

funct (emp1.city);

संपूर्ण संरचना चर को फ़ंक्शन से पास किया जा सकता है, दोनों तरीकों से मूल्य द्वारा कॉल और संदर्भ द्वारा कॉल किया जा सकता है।

Funt (emp1); // कॉल विधि फ़ंक्शन द्वारा कॉल द्वारा मूल्य विधि। । । void फंक्शनल (स्ट्रक्चर एंप्लॉयी एम्पायर) {// emp1 के सदस्यों के मान प्राप्त करना। अदालत <

यहां, संरचना चर के एक सदस्य के मूल्य में परिवर्तन फ़ंक्शन के बाहर प्रतिबिंबित नहीं होगा क्योंकि मूल्य विधि द्वारा कॉल द्वारा एक चर पारित किया जाता है। अब संदर्भ विधि द्वारा कॉल द्वारा समान कार्य करते हैं।

Funt (और emp1); // कॉलिंग फ़ंक्शन संदर्भ विधि द्वारा कॉल द्वारा। । । void फंक्शनल (स्ट्रक्चर कर्मचारी * एंपायर) {// emp1 का एड्रेसिंग एड्रेस 1। emp-> शहर = "नूर"; // संरचना वैरिएबल emp1 के सदस्य (शहर) का मान बदलें। । }

यहां, संरचना चर को संदर्भ द्वारा पारित किया जाता है, इसलिए संरचना चर के सदस्यों के मूल्य में परिवर्तन भी फ़ंक्शन के बाहर भी दर्शाता है।

srtuct कर्मचारी * एम्पायर; // टाइप एंप्लॉयी के स्ट्रक्चर पॉइंटर को डीक्लर करना। रोजगार = & emp1; // सूचक को एम्प 1 का पता निर्दिष्ट करना। emp-> शहर // emp1 के सदस्य शहर तक पहुँचने वाला सूचक।

संरचना का सूचक भी बनाया जा सकता है; यह संरचना चर का पता रखता है।

संरचना में एग्रीगेट इनिशियलाइज़ेशन की अनुमति तब दी जाती है जब संरचना की परिभाषा में कोई भी उपयोगकर्ता परिभाषित कंस्ट्रक्टर या वर्चुअल फ़ंक्शंस या बेस क्लास या निजी या संरक्षित क्षेत्र न हो।

int main () {स्ट्रक्चर एपीएम 3 = {"अनिल", "टेकपीक्स", "नूर"}; } // संभव है कि कर्मचारी की संरचना में उपरोक्त बातों में से कोई भी शामिल नहीं है।

संघ की परिभाषा

एक संघ एक स्मृति स्थान है जिसे दो या दो से अधिक भिन्न प्रकारों द्वारा एक एकल संघ प्रकार के तहत घोषित किया जाता है। यूनियन घोषित करने के लिए इस्तेमाल किया जाने वाला कीवर्ड "यूनियन" है। C ++ में, एक संघ में सदस्य फ़ंक्शन और चर दोनों हो सकते हैं। डिफ़ॉल्ट रूप से, संघ के सभी सदस्य "सार्वजनिक" हैं। "संघ" की घोषणा संरचना की घोषणा के समान है।

यूनियन u_type {int x, char c; फ्लोट एफ; } u1, u2;

यहां, हमने u_type नाम का एक संघ घोषित किया था। U_type के सदस्य पूर्णांक प्रकार के 'x', वर्ण प्रकार के 'c' और फ्लोट प्रकार के 'f' हैं। हमने यूनियन की घोषणा के ठीक बाद यूनियन वेरिएबल्स 1 u1 ’और’ u2 ’टाइप भी बनाए थे। हम यूनियन के ऐलान से अलग यूनियन वेरिएबल की भी घोषणा कर सकते हैं।

int main () {Union u_type u1, u2; // C ++ में कीवर्ड यूनियन अनिवार्य नहीं है। }

संघ के सदस्यों की पहुंच डॉट (।) ऑपरेटर के उपयोग से हो सकती है, जो यूनियन वेरिएबल से पहले होती है और उस वेरिएबल के सदस्य का अनुसरण करती है।

u1.x = 10;

संरचनाओं की तरह, एक संघ में समग्र आरंभ संभव नहीं है। जैसा कि हम जानते हैं कि यूनियन अपने सभी सदस्य के लिए एक ही समय में एक ही मेमोरी स्थान साझा करती है, केवल एक वेरिएबल को इनिशियलाइज़ किया जाता है और सभी वैरिएबल स्वतः ही इनिशियलाइज़ वैल्यू के साथ अपडेट होते हैं।

u1.x = 10; अदालत <

यदि आप to u1 'के किसी भी सदस्य के मूल्य को बदलने का प्रयास करते हैं। अन्य सदस्य उस मूल्य पर स्वतः अपडेट हो जाएंगे।

u1.c = 65; अदालत <

संघ को आवंटित स्थान संघ के सबसे बड़े सदस्य के आकार के बराबर है। चूँकि ’char’ को आवंटित बाइट 1 बाइट है, इसलिए is int ’4 बाइट है और at फ्लोट’ 4 बाइट्स है, इसलिए सबसे बड़ा आकार 4 बाइट है। तो, 'u1' और 'u2' को आवंटित की गई मेमोरी 4 बाइट है।

int main () {int size_1 = sizeof (u1); // 4 int size_2 = sizeof (u2); // 4

संघ के लिए सूचक संरचना में ही बनाया जा सकता है। सूचक संघ का पता रखता है।

यूनियन u_type * un; संयुक्त राष्ट्र = & u1; अदालत <एक्स; // 10

संरचना की तरह, संघ को भी दोनों विधियों द्वारा कार्य के लिए पारित किया जा सकता है अर्थात् मूल्य द्वारा कॉल और संदर्भ द्वारा कॉल।

funct (U1); // कॉल विधि फ़ंक्शन द्वारा कॉल द्वारा मूल्य विधि। । । शून्य कार्यात्मकता (यूनियन u_type संयुक्त राष्ट्र) {// u1 के सदस्य के मूल्य को प्राप्त करना। अदालत <

अब, संदर्भ विधि द्वारा कॉल का उपयोग करके फ़ंक्शन को कॉल करें।

funct (और U1); // कॉलिंग फ़ंक्शन को कॉल करके रीफ्रेंस विधि द्वारा। । । शून्य कार्यात्मक (यूनियन u_type संयुक्त राष्ट्र) {// u1 के पते को प्राप्त करना। अन-> x = 20 }

C ++ में एक विशेष प्रकार का संघ है जिसे बेनामी संघ कहा जाता है। अनाम संघ का प्रकार नाम नहीं हो सकता है और, ऐसे संघ का कोई भी चर नहीं बनाया जा सकता है। यह केवल संकलक को बताना है कि इसके सदस्य चर उसी स्थान को साझा करने के लिए हैं। एक अनाम संघ के चर को सामान्य डॉट (।) ऑपरेटर के बिना संदर्भित किया जा सकता है।

int main () {Union {// टाइप नाम के साथ अनाम यूनियन को परिभाषित करते हैं। int x, char c; फ्लोट एफ; }; एक्स = 10; // बाहर के ऑपरेटर के साथ संघ चर का संदर्भ दिया गया है <

अनाम संघ में किसी भी सदस्य समारोह की अनुमति नहीं है, इसमें निजी या संरक्षित डेटा शामिल नहीं हो सकते हैं, और वैश्विक अनाम संघ को 'स्थिर' के रूप में निर्दिष्ट किया जाना चाहिए।

सामान्य संघ घोषणा के लिए याद रखने वाले बिंदु।

  • एक संघ की परिभाषा में कंस्ट्रक्टर और विध्वंसक भी हो सकते हैं।
  • संघ एक ही मेमोरी लोकेशन को देखने के लिए कई तरीके प्रदान करता है।
  • संघ किसी भी प्रकार के वर्ग को विरासत में नहीं दे सकता है।
  • संघ एक आधार वर्ग नहीं हो सकता।
  • यूनियन में वर्चुअल मेंबर फंक्शन नहीं हो सकता।
  • संघ का स्थैतिक चर नहीं हो सकता।
  1. संरचना अलग-अलग सदस्यों के लिए अलग-अलग मेमोरी स्थान का उपयोग करती है। इसलिए, सभी सदस्यों को अलग-अलग मूल्य आवंटित किया जा सकता है। लेकिन, यूनियन सभी सदस्यों को एक ही मेमोरी स्थान आवंटित करता है। इसलिए, सभी सदस्यों को एक एकल मूल्य आवंटित किया जा सकता है।
  2. संरचना में सभी सदस्यों के लिए अलग-अलग मेमोरी स्थान है; इसलिए, इसमें एक समय में कई मान हो सकते हैं, और जैसा कि हम जानते हैं कि यूनियन सभी सदस्यों के लिए एक ही मेमोरी स्थान साझा करता है इसलिए, यह एक समय में एक ही मान संग्रहीत कर सकता है।
  3. आम तौर पर, संरचना का कुल आकार संघ के कुल आकार से बड़ा होता है क्योंकि संरचना का आकार संरचनाओं के सभी सदस्यों के आकार का योग होता है और संघ का आकार सदस्य के आकार का होता है। सबसे बड़ा प्रकार।
  4. संरचना प्रत्येक स्थान का एकल दृश्य प्रदान करती है जबकि, संघ एक ही स्थान के कई दृश्य प्रदान करता है।
  5. आप एक अनाम संघ घोषित कर सकते हैं लेकिन एक अनाम संरचना नहीं।

समानता:

  • संरचना और संघ दोनों के पास स्वयं को घोषित करने का एक ही तरीका है, चर बनाना और चर के सदस्यों तक पहुंचने का समान तरीका है।
  • मूल्य और कॉल दोनों विधियों द्वारा एक संरचना और संघ दोनों को एक फ़ंक्शन में भेजा जा सकता है।
  • दोनों संरचना और संघ कंटेनर डेटा प्रकार हैं और उनके सदस्यों के रूप में अन्य संरचना, संघ, सरणी सहित किसी भी डेटा प्रकार का एक ऑब्जेक्ट होता है।

निष्कर्ष:

दोनों, संरचना और संघ कंटेनर डेटाटाइप हैं जिसमें विभिन्न प्रकार के सदस्य होते हैं। लेकिन संरचनाओं का उपयोग तब किया जाता है जब हमें सभी सदस्यों के लिए एक अलग मेमोरी लोकेशन में अलग-अलग वैल्यू स्टोर करने की आवश्यकता होती है। प्रकार के रूपांतरण की आवश्यकता होने पर यूनियनों का उपयोग किया जाता है।