रचना आणि युनियन दरम्यान फरक

लेखक: Laura McKinney
निर्मितीची तारीख: 1 एप्रिल 2021
अद्यतन तारीख: 15 मे 2024
Anonim
दिवस व रात्र कसे व का होतात ? इयत्ता ४ थी , DAY AND NIGHT IN MARATHI !
व्हिडिओ: दिवस व रात्र कसे व का होतात ? इयत्ता ४ थी , DAY AND NIGHT IN MARATHI !

सामग्री


सी ++ सानुकूल डेटा तयार करण्यासाठी सी भाषेद्वारे प्रदान केलेल्या पाचही मार्गांना अनुमती देते. ते पाच मार्ग म्हणजे ‘रचना’, ‘बिट-फील्ड’, ‘युनियन’, ‘गणना’, ‘टाइपपेफ’. खालील लेखात आपण रचना आणि युनियनमधील फरक अभ्यासणार आहोत. रचना आणि युनियन दोन्ही कंटेनर डेटा प्रकार आहेत जे कोणत्याही "प्रकार" चा डेटा ठेवू शकतात. रचना आणि युनियनमध्ये फरक करणारा एक मुख्य फरक म्हणजे रचना त्याच्या प्रत्येक सदस्यासाठी स्वतंत्र मेमरी स्थान असते तर, युनियनचे सदस्य समान मेमरी स्थान सामायिक करतात.

तुलना चार्टसह रचना आणि युनियनमधील फरक समजून घेऊया.

  1. तुलना चार्ट
  2. व्याख्या
  3. मुख्य फरक
  4. समानता
  5. निष्कर्ष

तुलना चार्ट

तुलनाचा आधाररचनायुनियन
मूलभूतसंरचनेच्या प्रत्येक सदस्यास स्वतंत्र मेमरी स्थान दिले जाते.युनियनचे सर्व सदस्य समान मेमरी स्थान सामायिक करतात.
घोषणाstruct स्ट्रक्चर_नाव {
प्रकार 1;
प्रकार 2;
.
.
} चल 1, व्हेरिएबल 2, ...;
युनियन u_name {
प्रकार 1;
प्रकार 2;
.
.
} चल 1, व्हेरिएबल 2, ...;
कीवर्डरचनामिलन
आकारसंरचनेचा आकार = सर्व डेटा सदस्यांच्या आकाराची बेरीज.युनियनचा आकार = सर्वात मोठ्या सदस्यांचा आकार.
स्टोअर मूल्यसर्व सदस्यांसाठी भिन्न मूल्ये संग्रहित करते.सर्व सदस्यांसाठी समान मूल्य साठवते.
एका वेळीरचना विविध सदस्यांची रचनाची अनेक मूल्ये साठवते.युनियन सर्व सदस्यांसाठी एकाच वेळी एकच मूल्य साठवते.
पाहण्याचा मार्गप्रत्येक मेमरी स्थान पाहण्यासाठी एकच मार्ग प्रदान करा.समान मेमरी स्थान पाहण्यासाठी अनेक मार्ग प्रदान करा.
अनामिक वैशिष्ट्यअनामिक वैशिष्ट्य नाही.अज्ञात संघ घोषित केला जाऊ शकतो.

संरचनेची व्याख्या

रचना भिन्न डेटा प्रकारांच्या चलांचे संग्रह आहे, ज्यास सामान्य नावाने संदर्भित केले जाते. स्ट्रक्चरमधील व्हेरिएबल्सला “मेंबर्स” असे म्हणतात. डीफॉल्टनुसार, संरचनेचे सर्व सदस्य "सार्वजनिक" असतात. जेव्हा आपण एखादी रचना घोषित करता तेव्हा आपण एक टेम्पलेट तयार करता, ज्याचा वापर स्ट्रक्चर ऑब्जेक्ट्स तयार करण्यासाठी केला जाऊ शकतो, डेटा सदस्यांची आणि सदस्य फंक्शन्सची समान संस्था सामायिक करणे. संरचनेची घोषणा नेहमी आधी "स्ट्रक्चर" कीवर्डद्वारे केली जाते, जो कंपाईलरला स्ट्रक्चर घोषित केल्याचे सांगते. चला एक उदाहरण घेऊ.


चला एक उदाहरण घेऊ.

रचना कर्मचारी-स्ट्रिंग नाव; स्ट्रिंग कंपनी_नाव; स्ट्रिंग सिटी } एम्प 1, एम्प 2;

येथे आम्ही कर्मचार्‍यांची माहिती संग्रहित करण्यासाठी रचना घोषित करतो. घोषणेस अर्धविराम द्वारे समाप्त केले जाते कारण रचना घोषित करणे हे विधान असते आणि C ++ मध्ये विधान अर्धविराम द्वारे समाप्त केले जाते.

स्ट्रक्चरला दिलेले नाव “प्रकार” परिभाषित करते (वरील उदाहरणात रचनाचे नाव “कर्मचारी” आहे) या प्रकारांचे व्हेरिएबल्स तयार केले जाऊ शकतील, जसे वरीलप्रमाणे आम्ही “एम्प्लॉई” असे दोन व्हेरिएबल तयार केले. वरील उदाहरणात आम्ही घोषणेनंतरच ‘स्ट्रक्चर’ व्हेरिएबल तयार केले; वैकल्पिकरित्या, ते स्वतंत्रपणे तयार केले जाऊ शकते.

कामगार कर्मचारी एम्प 1, एम्प 2; // कीवर्ड स्ट्रक्चर अनिवार्य नाही.

स्ट्रक्चर व्हेरिएबलचे सभासद आरंभ केले जाऊ शकतात किंवा डॉट (.) ऑपरेटरचा वापर करून प्रवेश करू शकता.

emp1.name = "ashok";

एका स्ट्रक्चर व्हेरिएबलमधील माहिती खालील प्रमाणेच दुसर्‍या स्ट्रक्चर व्हेरिएबलला दिली जाऊ शकते.

emp1.name = "ashok"; emp1.company_name = "टेकपिक्स"; एम्प 1 सीटी = "दिल्ली"; एम्प 2 = एम्प 1; // एम्प 1 च्या एम्प 2 च्या सदस्याचे मूल्य निर्दिष्ट करणे. कोउट <

येथे आम्ही रचना ‘व्हेरिएबल’ एम्पा 1 ’ला‘ एम्पा २ ’म्हणून दिली.’ ’एम्प 1 its त्याच्या सदस्यांची सर्व किंमत‘ एपीएम 2 ’च्या संबंधित सदस्यावर कॉपी करते.


स्ट्रक्चर व्हेरिएबलचा सदस्य फंक्शनला जाऊ शकतो.

फंट (एम्प 1 सीटी);

दोन्ही स्ट्रक्चर्सद्वारे संपूर्ण स्ट्रक्चर व्हेरिएबलला व्हॅल्यूद्वारे कॉल करणे आणि रेफरन्सद्वारे कॉल करणे शक्य आहे.

फंट (एम्प 1); // व्हॅल्यू पद्धतीने कॉलद्वारे कार्य कॉल. . . शून्य फंट (स्ट्रक्चर एम्पायर एम्प) {// एम्प 1 च्या सदस्यांची मूल्ये प्राप्त करणे. कोउट <

येथे, व्हेरिएबल व्हॅल्यू पद्धतीने कॉलद्वारे पास केल्यामुळे स्ट्रक्चर व्हेरिएबलच्या सदस्याच्या मूल्यात झालेला बदल फंक्शनच्या बाहेरही दिसणार नाही. आता संदर्भ पद्धतीने कॉल करून असेच करूया.

फॅंट (& एम्प 1); // संदर्भ पद्धतीने कॉलद्वारे कॉलिंग फंक्शन. . . शून्य फंट (स्ट्रॉच कर्मचारी * साम्राज्य) {// एम्प 1 चा पत्ता प्राप्त करणे. एम्प-> शहर = "नूर"; // स्ट्रक्चर व्हेरिएबल एम्पी 1 च्या सदस्याचे (शहर) मूल्य बदला. . }

येथे स्ट्रक्चर व्हेरिएबल रेफरन्सद्वारे पास झाला आहे तर, स्ट्रक्चर व्हेरिएबलच्या सदस्यांच्या व्हॅल्यू मध्ये बदल देखील फंक्शनच्या बाहेरही प्रतिबिंबित होईल.

श्रीटक्ट कर्मचारी * एम्प; // प्रकारच्या कर्मचार्‍याची स्ट्रक्चर पॉईंटर घोषित करणे. एम्प = & एम्प 1; // पॉईंटरला एम्प 1 चा पत्ता प्रदान करणे. एम्प-> शहर // एम्पा 1 च्या सदस्य शहरामध्ये प्रवेश करणारे पॉईंटर.

रचना करण्यासाठी पॉईंटर देखील तयार केला जाऊ शकतो; त्यात स्ट्रक्चर व्हेरिएबलचा पत्ता आहे.

संरचनेत परिभाषा नसताना कोणत्याही वापरकर्त्याने परिभाषित कन्स्ट्रक्टर किंवा आभासी कार्ये किंवा बेस क्लास किंवा खाजगी किंवा संरक्षित फील्डमध्ये एकत्रित आरंभिकतेस संरचनेत परवानगी दिली जाते.

int main () {ep epm3 = {"अनिल", "टेकपिक्स", "नूर"}; } // कर्मचार्‍याच्या संरचनेत वरीलपैकी कोणत्याही गोष्टी असू शकत नाहीत.

संघाची व्याख्या

एक युनियन एक मेमरी स्थान आहे ज्याचे विभाजन दोन किंवा अधिक भिन्न एकाच युनियन प्रकारात घोषित केले जाते. युनियन घोषित करण्यासाठी वापरलेला कीवर्ड म्हणजे “यूनियन”. सी ++ मध्ये, युनियनमध्ये सदस्य कार्य आणि चल दोन्ही असू शकतात. डीफॉल्टनुसार, युनियनचे सर्व सदस्य "सार्वजनिक" असतात. “युनियन” ची घोषणा ही स्ट्रक्चरच्या घोषणेप्रमाणेच आहे.

युनियन यू_प्रकार {इंट एक्स, चार सी; फ्लोट एफ; ; u1, u2;

येथे आपण u_type नावाचे युनियन घोषित केले होते. यू_टाइपचे सदस्य पूर्णांक प्रकाराचे ‘x’, वर्ण प्रकाराचे ‘सी’ आणि फ्लोट प्रकाराचे ‘एफ’ असतात. आम्ही युनियन घोषित झाल्यावरच ‘u_type’ प्रकाराचे ‘u1’ आणि ‘u2’ युनियन व्हेरिएबल्स देखील तयार केले होते. आपण युनियन घोषित करण्यापासून युनियन व्हेरिएबल स्वतंत्रपणे घोषित करू शकतो.

इंट मेन () {युनियन यू_टाइप यू 1, यू 2; // सी ++ मध्ये कीवर्ड युनियन अनिवार्य नाही. }

युनियन वेरिएबलच्या अगोदर डॉट (.) ऑपरेटर वापरुन युनियनच्या सदस्यांपर्यंत प्रवेश करणे शक्य आहे.

u1.x = 10;

स्ट्रक्चर्सप्रमाणेच, युनियनमध्ये एकत्रित आरंभ करणे शक्य नाही. आम्हाला माहित आहे की युनियन त्याच्या सर्व सदस्यांसाठी समान मेमरी स्थान सामायिक करते एकाच वेळी फक्त एक चल प्रारंभ केला जातो आणि सर्व व्हेरिएबल स्वयंचलितपणे आरंभिक मूल्यासह अद्यतनित केले जातात.

u1.x = 10; कोउट <

आपण ‘u1’ च्या कोणत्याही सदस्याचे मूल्य बदलण्याचा प्रयत्न केल्यास. अन्य सदस्याला त्या मूल्यामध्ये स्वयंचलितपणे अद्यतनित केले जाईल.

u1.c = 65; कोउट <

युनियनला दिलेली जागा ही युनियनच्या सर्वात मोठ्या सदस्याच्या आकारापेक्षा समान आहे. ‘चार’ वर वाटप केलेले बाइट 1 बाइट असल्याने ‘इंट’ 4 बाइट आणि ‘फ्लोट’ 4 बाइट आहे, तर सर्वात मोठा आकार 4 बाइट आहे. तर, ‘u1’ आणि ‘u2’ ला दिलेली मेमरी 4 बाइट आहे.

इंट मेन () {इंट साइज_1 = आकार (यू 1); // 4 इंटी आकार = = आकार (यू 2); // 4

रचनाप्रमाणेच युनियनचे पॉईंटर तयार केले जाऊ शकते. पॉईंटर मध्ये युनियनचा पत्ता असतो.

युनियन यू_टाइप * अन; अन = & u1; कोउट <x; // 10

स्ट्रक्चर प्रमाणेच युनियन दोन्ही पध्दतींद्वारे कार्य करण्यासाठी पुरविला जाऊ शकतो म्हणजेच मूल्यद्वारे कॉल करणे आणि कॉलद्वारे संदर्भाद्वारे कॉल करणे.

फंट (u1); // व्हॅल्यू पद्धतीने कॉलद्वारे कार्य कॉल करणे. . . शून्य फंट (युनियन u_type अन) {// u1 सदस्याचे मूल्य प्राप्त करते. कोउट <

आता संदर्भ पद्धतीद्वारे कॉलद्वारे फंक्शनला कॉल करूया.

फंक्ट (& u1); // कॉलिंग रीफ्रेंस पद्धतीने कॉलिंग फंक्शन. . . शून्य फंट (युनियन यू_टाइप अन) {// यू 1 चा पत्ता प्राप्त करणे. अन-> x = 20. }

सी ++ मध्ये एक विशेष प्रकारचा युनियन आहे ज्याला अ‍ॅनामिकस युनियन म्हणतात. अज्ञात युनियनमध्ये नाव नाव असू शकत नाही आणि अशा युनियनचे कोणतेही चल तयार केले जाऊ शकत नाहीत. कंपाईलरला फक्त तेच सांगणे आहे की त्याचे सदस्य व्हेरिएबल्स समान स्थान सामायिक करण्यासाठी आहेत. अज्ञात युनियनचे चल सामान्य डॉट (.) ऑपरेटरशिवाय संदर्भित करता येतात.

int main () {Union {// अज्ञात युनियनचे नाव टाइप करा. इंट एक्स, चार सी; फ्लोट एफ; }; x = 10; // युनियन व्हेरिएबलला आउट डॉट ऑपरेटर कॉउट <संदर्भित केले

अज्ञात युनियनमध्ये कोणत्याही सदस्याच्या कार्यास परवानगी नाही, त्यात खाजगी किंवा संरक्षित डेटा असू शकत नाही आणि जागतिक अज्ञात युनियनला ‘स्थिर’ म्हणून निर्दिष्ट केले जाणे आवश्यक आहे.

सामान्य संघटनेच्या घोषणेसाठी लक्षात ठेवण्याचे मुद्दे.

  • युनियनच्या व्याख्येमध्ये कन्स्ट्रक्टर आणि डिस्ट्रक्टर देखील असू शकतात.
  • युनियन समान मेमरी स्थान पाहण्यासाठी अनेक मार्ग प्रदान करते.
  • युनियन कोणत्याही प्रकारच्या वर्गाचा वारसा घेऊ शकत नाही.
  • युनियन हा बेस क्लास असू शकत नाही.
  • युनियनमध्ये व्हर्च्युअल मेंबर फंक्शन असू शकत नाही.
  • युनियन मध्ये स्थिर चल असू शकत नाही.
  1. स्ट्रक्चर विविध सदस्यांसाठी भिन्न मेमरी स्थान वापरते. म्हणूनच, सर्व सदस्यांना वेगळे मूल्य वाटप करता येते. परंतु, युनियन सर्व सदस्यांना समान मेमरी स्थान वाटप करते. म्हणूनच, सर्व सदस्यांना एकच मूल्य दिले जाऊ शकते.
  2. संरचनेत सर्व सदस्यांसाठी भिन्न मेमरी स्थान आहे; म्हणूनच, त्यात एकाच वेळी एकाधिक मूल्ये असू शकतात आणि आपल्याला माहित आहे की युनियन सर्व सदस्यांसाठी समान मेमरी स्थान सामायिक करते, ते एकाच वेळी एक मूल्य ठेवू शकते.
  3. सर्वसाधारणपणे, संरचनेचे एकूण आकार हे युनियनच्या एकूण आकारापेक्षा मोठे असते कारण एखाद्या संरचनेचे आकार हे रचनांच्या सर्व सदस्यांच्या आकाराचे बेरीज असते आणि युनियनचे आकार हे त्या सदस्याच्या आकाराचे असते सर्वात मोठा प्रकार
  4. रचना प्रत्येक स्थानाचे एकच दृश्य प्रदान करते, तर युनियन एकाच स्थानाचे एकाधिक दृश्ये प्रदान करते.
  5. आपण अनामिक संघ घोषित करू शकता परंतु निनावी रचना नाही.

समानता:

  • स्ट्रक्चर आणि युनियन दोन्ही स्वतः घोषित करण्याचा समान मार्ग आहे, व्हेरिएबल्स तयार करतात आणि व्हेरिएबल्सच्या सदस्यांपर्यंत पोहोचण्याचा समान मार्ग आहे.
  • दोन्ही स्ट्रक्चर आणि युनियन दोन्ही पध्दतीद्वारे फंक्शनला पुरविल्या जाऊ शकतात कॉलद्वारे व्हॅल्यूद्वारे आणि कॉलद्वारे संदर्भ द्वारे.
  • स्ट्रक्चर आणि युनियन दोन्ही कंटेनर डेटा प्रकार आहेत आणि त्यांचे सदस्य म्हणून इतर रचना, युनियन, अ‍ॅरेसह कोणत्याही डेटा प्रकाराचे ऑब्जेक्ट असतात.

निष्कर्ष:

स्ट्रक्चर आणि युनियन दोन्ही कंटेनर डेटाटाइप आहेत ज्यात विविध प्रकारच्या सदस्यांचा समावेश आहे. जेव्हा स्ट्रक्चर्स वापरली जातात जेव्हा आम्हाला सर्व सदस्यांसाठी वेगळ्या मेमरी ठिकाणी वेगळ्या व्हॅल्यूची आवश्यकता असते. जेव्हा रूपांतरण आवश्यक असते तेव्हा युनियन वापरल्या जातात.