रचना आणि युनियन दरम्यान फरक
सामग्री
सी ++ सानुकूल डेटा तयार करण्यासाठी सी भाषेद्वारे प्रदान केलेल्या पाचही मार्गांना अनुमती देते. ते पाच मार्ग म्हणजे ‘रचना’, ‘बिट-फील्ड’, ‘युनियन’, ‘गणना’, ‘टाइपपेफ’. खालील लेखात आपण रचना आणि युनियनमधील फरक अभ्यासणार आहोत. रचना आणि युनियन दोन्ही कंटेनर डेटा प्रकार आहेत जे कोणत्याही "प्रकार" चा डेटा ठेवू शकतात. रचना आणि युनियनमध्ये फरक करणारा एक मुख्य फरक म्हणजे रचना त्याच्या प्रत्येक सदस्यासाठी स्वतंत्र मेमरी स्थान असते तर, युनियनचे सदस्य समान मेमरी स्थान सामायिक करतात.
तुलना चार्टसह रचना आणि युनियनमधील फरक समजून घेऊया.
- तुलना चार्ट
- व्याख्या
- मुख्य फरक
- समानता
- निष्कर्ष
तुलना चार्ट
तुलनाचा आधार | रचना | युनियन |
---|---|---|
मूलभूत | संरचनेच्या प्रत्येक सदस्यास स्वतंत्र मेमरी स्थान दिले जाते. | युनियनचे सर्व सदस्य समान मेमरी स्थान सामायिक करतात. |
घोषणा | 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; कोउट < स्ट्रक्चर प्रमाणेच युनियन दोन्ही पध्दतींद्वारे कार्य करण्यासाठी पुरविला जाऊ शकतो म्हणजेच मूल्यद्वारे कॉल करणे आणि कॉलद्वारे संदर्भाद्वारे कॉल करणे. फंट (u1); // व्हॅल्यू पद्धतीने कॉलद्वारे कार्य कॉल करणे. . . शून्य फंट (युनियन u_type अन) {// u1 सदस्याचे मूल्य प्राप्त करते. कोउट < आता संदर्भ पद्धतीद्वारे कॉलद्वारे फंक्शनला कॉल करूया. फंक्ट (& u1); // कॉलिंग रीफ्रेंस पद्धतीने कॉलिंग फंक्शन. . . शून्य फंट (युनियन यू_टाइप अन) {// यू 1 चा पत्ता प्राप्त करणे. अन-> x = 20. } सी ++ मध्ये एक विशेष प्रकारचा युनियन आहे ज्याला अॅनामिकस युनियन म्हणतात. अज्ञात युनियनमध्ये नाव नाव असू शकत नाही आणि अशा युनियनचे कोणतेही चल तयार केले जाऊ शकत नाहीत. कंपाईलरला फक्त तेच सांगणे आहे की त्याचे सदस्य व्हेरिएबल्स समान स्थान सामायिक करण्यासाठी आहेत. अज्ञात युनियनचे चल सामान्य डॉट (.) ऑपरेटरशिवाय संदर्भित करता येतात. int main () {Union {// अज्ञात युनियनचे नाव टाइप करा. इंट एक्स, चार सी; फ्लोट एफ; }; x = 10; // युनियन व्हेरिएबलला आउट डॉट ऑपरेटर कॉउट <संदर्भित केले अज्ञात युनियनमध्ये कोणत्याही सदस्याच्या कार्यास परवानगी नाही, त्यात खाजगी किंवा संरक्षित डेटा असू शकत नाही आणि जागतिक अज्ञात युनियनला ‘स्थिर’ म्हणून निर्दिष्ट केले जाणे आवश्यक आहे. सामान्य संघटनेच्या घोषणेसाठी लक्षात ठेवण्याचे मुद्दे. स्ट्रक्चर आणि युनियन दोन्ही कंटेनर डेटाटाइप आहेत ज्यात विविध प्रकारच्या सदस्यांचा समावेश आहे. जेव्हा स्ट्रक्चर्स वापरली जातात जेव्हा आम्हाला सर्व सदस्यांसाठी वेगळ्या मेमरी ठिकाणी वेगळ्या व्हॅल्यूची आवश्यकता असते. जेव्हा रूपांतरण आवश्यक असते तेव्हा युनियन वापरल्या जातात.
समानता:
निष्कर्ष: