वर्ग और संरचना के बीच का अंतर

Anonim

कक्षा और संरचना के बीच के अंतर को समझने से पहले, हमें उनके साथ जुड़े कुछ बुनियादी अवधारणाओं को जानना चाहिए। अवधारणाओं की समझ के बिना, दोनों के बीच के मतभेदों को समझना मुश्किल है।

वर्ग और वस्तु क्या है:

ये ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग से संबंधित दो महत्वपूर्ण अवधारणाएं हैं, और वे फ़ंक्शन और अन्य फ़ंक्शन से गुजरने वाले डेटा को तैयार करने का आधार बनाते हैं। बेहतर समझने के लिए, हम इसे वास्तविक जीवन के उदाहरण के साथ सहसंबंधित कर सकते हैं। एक कक्षा को एक दुकान के रूप में माना जा सकता है, और ऑब्जेक्ट किसी भी व्यक्ति, विशिष्ट स्टोर जैसे कि किराना, स्टेशनरी, फलों आदि हो सकता है। सभी ऑब्जेक्ट्स मुख्य वर्ग के सामान्य गुणों को साझा करते हैं - स्टोर - और बदले में, ऑब्जेक्ट्स की अपनी विशेष संपत्तियां हो सकती हैं जैसे विशिष्ट डिज़ाइन, लाइटिंग आदि। वस्तुओं के माध्यम से, हम वास्तव में कक्षा का उपयोग कर सकते हैं; वे एक वर्ग के उदाहरण बनाते हैं।

कक्षा का सिंटैक्स

कक्षा स्टोर {

सार्वजनिक स्ट्रिंग चीजें;

सार्वजनिक स्ट्रिंग डिजाइन;

}

किसी वस्तु का सिंटैक्स

स्टोर किराना = नया स्टोर ();

स्टोर स्टेशनरी = नया स्टोर ();

एक संरचना क्या है?

एक संरचना में केवल डेटा शामिल है, और इसलिए यह स्ट्रक्चर ऑब्जेक्ट के माध्यम से व्यक्तिगत डेटा आवश्यकताओं को तैयार करने में सहायक है। एक वर्ग के विपरीत, यह फ़ंक्शन का अभाव है। यहां इसकी वाक्यविन्यास है:

स्ट्रक्चर किराने का सामान {

चार प्रवेश द्वार [50];

पूर्ण प्रवेश द्वार_आकार;

} किराने का सामान;

सभी स्टोर अलग-अलग नामों और आकारों के साथ 'प्रवेश' का उपयोग कर सकते हैं

वंशानुक्रम क्या है?

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

अब जब कि हम बुनियादी अवधारणाओं से परिचित हैं, हम कक्षा और संरचना के बीच वास्तविक अंतर में जा सकते हैं।

वे कैसे भिन्न हैं?

  • पुनः प्रयोज्यता: जैसा कि कक्षाएं मूल रूपरेखा बनाते हैं, उनका पुन: उपयोग किया जा सकता है; Structs, हालांकि, विशिष्ट गुणों के साथ व्यक्तिगत तत्व हैं, तो वे फिर से इस्तेमाल नहीं किया जा सकता है। उदाहरण के लिए, किराने की दुकान वर्ग को किसी भी प्रकार के किराने की दुकान के लिए इस्तेमाल किया जा सकता है, लेकिन स्ट्रेट ग्रॉसरी_एन्ट्रेंस उस अकेले के लिए विशिष्ट है और अन्य वर्गों में इसे फिर से उपयोग करने का कोई मतलब नहीं है।
  • दृश्यता: कक्षा में सभी फ़ंक्शन अपने ऑब्जेक्ट के लिए सार्वजनिक रूप से उपलब्ध हैं।उदाहरण के लिए, हमारे पास क्लास 'स्टोर' के तहत 'चीजें' नामक फ़ंक्शन हैं फ़ंक्शन 'चीजें', 'किराने की दुकान,' स्टेशनरी स्टोर 'आदि जैसे सभी वस्तुओं के लिए दृश्यमान होती है। स्ट्रक्चर के साथ इस तरह की दृश्यता संभव नहीं है क्योंकि संरचना के आंकड़े स्वयं तक सीमित हैं और दूसरे स्ट्रेक्ट्स को दिखाई नहीं दे रहे हैं। चीजों को स्पष्ट करने के लिए, हम यह कह सकते हैं कि 'किराने का सामान' का डेटा अन्य सभी दुकानों के लिए सार्वजनिक रूप से दिखाई नहीं दे रहा है।
  • संदर्भ द्वारा पास और दर से पास: संदर्भ से पास करें केवल स्मृति स्थान भेज रहा है, न कि वास्तविक कार्यों को कार्य करने के लिए। इसका मतलब यह है कि जब भी मान में परिवर्तन होता है, परिवर्तन इसी फ़ंक्शंस में दिखाई देता है। मूल्य से गुजारें, बदले में, फ़ंक्शन के लिए केवल मूल्य भेज रहा है इस स्थिति में, इसे भेजा जाने के बाद के मूल्य में परिवर्तन फंक्शन में दिखाई नहीं देगा। क्लास संदर्भ से पास का उपयोग करता है, और स्ट्रेट पास मान का उपयोग करता है।
  • विरासत: कक्षाओं को उप-कक्षाएं बनाने के लिए आगे विरासत में लाया जा सकता है, लेकिन संकाय विरासत का उपयोग नहीं कर सकते। उदाहरण के लिए, क्लास स्टोर अपने कार्यों को उप-श्रेणी 'किराने की दुकान' में देता है लेकिन संरचना 'grocery_entrance' किसी भी समारोह का वारिस नहीं कर सकते हम कह सकते हैं कि उप-संरचना जैसी कोई अवधारणा नहीं है
  • डिफ़ॉल्ट दृश्यता: कक्षा के सभी सदस्यों को निजी संस्थाओं के रूप में डिफ़ॉल्ट रूप से रखा जाता है, जबकि एक स्ट्रक्चर के सदस्यों को डिफ़ॉल्ट रूप से सार्वजनिक संस्थाओं के रूप में रखा जाता है।
  • एक खाली कक्षा और ढांचा का आकार: कक्षा 1 बाइट के एक आकार का उपयोग करती है, भले ही वह खाली हो, जबकि ढलान किसी भी मेमोरी का उपयोग न करें जब यह रिक्त हो। इसका मतलब है कि हम कह सकते हैं कि एक खाली स्ट्रेट का आकार 0 बाइट्स के बराबर है।
  • कचरा संग्रह: कचरा संग्रह कक्षाओं के साथ संभव है, क्योंकि वे संदर्भ से पास का उपयोग करते हैं। इसलिए, एक स्थान पर सफाई करना आसान है जहां डेटा संग्रहीत किया जाता है। दूसरी ओर, संरचना के साथ कचरा संग्रहण संभव नहीं है, क्योंकि यह मूल्य से पास का उपयोग करता है और डेटा अलग-अलग स्थानों पर बिखरे हुए है।
  • मेमोरी प्रबंधन: क्योंकि कक्षा कचरा संग्रह की अनुमति देती है, इसलिए स्मृति प्रबंधन भी प्रभावी है; हालांकि, यह स्टर्कास के साथ प्रभावी नहीं है
  • निर्माता: एक निर्माता आमतौर पर विशिष्ट निर्दिष्ट मानों के साथ कक्षा को आरंभ करता है। हम इसे ऐसे कुछ की तरह देख सकते हैं जो मूल्यों के साथ आरंभ किया गया है यदि एक नया वर्ग बनाया जाना है, तो उस उदाहरण के लिए कन्स्ट्रक्टर को स्मृति आवंटित करने के लिए कहा जाता है। कंस्ट्रक्टर को बुलाते समय हम मूल्यों को तर्क के रूप में भी पारित कर सकते हैं। आइये अब हमारे वास्तविक चर्चा में आओ। वर्ग सभी प्रकार के कंस्ट्रक्टर की अनुमति देते हैं, जैसे कि तर्क के साथ या बिना, जबकि स्ट्रैक्ट्स केवल कन्स्ट्रक्टर को तर्क के साथ ही अनुमति देते हैं, i। ई। पैरामीटरयुक्त कन्स्ट्रक्टर
  • विनाशक: जब भी हमें एक क्लास के उदाहरण को हटाना पड़ता है, तो एक डिस्ट्रिक्टर कहलाता है नाशक, बदले में, उस उदाहरण को हटा देता है और स्मृति को मुक्त करता है एक वर्ग एक नाशक का उपयोग कर सकता है, जबकि एक स्ट्रैंट नहीं कर सकता।
  • सदस्य वैरिएबल आरंभ: क्लासेस में, हम सदस्य चर सीधे आरंभ कर सकते हैं; इस तरह के एक प्रारंभिक कार्य Structs के साथ संभव नहीं है
  • वस्तु निर्माण: वर्गों में वस्तु निर्माण के लिए सामान्य वाक्यविन्यास है:

डेमो obj = नया डेमो ();

इसका मतलब है कि हमें एक वर्ग के ऑब्जेक्ट बनाने के दौरान कीवर्ड 'नए' का उपयोग करना चाहिए।Structs की वस्तुओं बनाने जब यह आवश्यक नहीं है बस उनकी वाक्यविन्यास पर नज़र डालें:

डेमो ओब;

यह कीवर्ड 'नया' के बिना भी बिल्कुल काम करता है

कक्षा का उपयोग कब और स्ट्रक्चर का उपयोग करने के लिए कब?

जैसा कि डेटा को सौंपने में क्लासेस अधिक लचीला हैं और एक साथ काम करते हैं, हम जब इसके इस्तेमाल किए गए ऑब्जेक्ट जटिल और बड़े होते हैं, तो हम इसके लिए जा सकते हैं। हमारे उदाहरण में, एक मॉल बेहतर तरीके से सिस्टम को व्यक्त करने के लिए कक्षा 'स्टोर' का उपयोग कर सकता है। स्ट्रेक्ट्स, हालांकि, छोटे ऑब्जेक्ट के लिए प्रतिबंधित हैं, क्योंकि वे क्लासेस की अपेक्षा अपेक्षाकृत कम प्रभावी हैं। इसलिए, यदि आप अपनी खुद की एक दुकान तैयार करते हैं, तो स्ट्रेक्ट बेहतर विकल्प होते हैं।

कक्षा और उपराष्ट्रपति के लिए एक संरचना कैसे परिवर्तित करें?

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

हमें सारणीबद्ध रूप में उपरोक्त उल्लिखित अंतरों को देखें।

एस। अवधारणाओं अंतर
वर्ग संरचना
1 पुनः प्रयोज्य पूरी तरह से पुन: प्रयोग करने योग्य फिर से उपयोग करने योग्य नहीं
2 दृश्यता < कक्षा के सभी कार्य अपनी वस्तुओं के लिए दृश्यमान हैं एक स्ट्रक्चर के ऑब्जेक्ट का डेटा समान स्ट्रैट के अन्य ऑब्जेक्ट्स को दिखाई नहीं दे रहा है 3
संदर्भ से पास & मान से पास संदर्भ से पास का उपयोग> मूल्य का मूल्य का उपयोग करें 4 विरासत
एक वर्ग के कार्यों को इसके उपवर्गों द्वारा विरासत में प्राप्त किया जा सकता है; वंशानुक्रम की अनुमति देता है कभी भी वंशानुक्रम की अनुमति नहीं देता 5 डिफ़ॉल्ट दृश्यता
कक्षा के सभी सदस्यों को डिफ़ॉल्ट रूप से निजी है एक स्ट्रक्चर के सभी सदस्य डिफ़ॉल्ट रूप से सार्वजनिक हैं 6 आकार जब खाली होता है
खाली वर्ग का आकार 1 बाइट है खाली स्ट्रक्चर का आकार 0 बाइट्स 7 कूड़ा संग्रह < संदर्भ से पास का उपयोग करता है, कचरा संग्रह संभव है
जैसा कि यह मूल्य से पास का उपयोग करता है, कचरा संग्रह संभव नहीं है 8 मेमोरी प्रबंधन कचरा संग्रहण प्रक्रिया में आसानी से प्रभावी स्मृति प्रबंधन में मदद करता है
गरीबों में कचरा संग्रहण परिणाम की कमी मेमोरी प्रबंधन 9 कन्स्ट्रक्टर्स सभी प्रकार के कन्स्ट्रक्चर की अनुमति देता है, जैसे पैरामीटर के साथ या बिना
केवल पैरामीटरेटेड कन्स्ट्रक्टर की अनुमति देता है 10 डिस्ट्रक्टर्स इसका उपयोग कर सकते हैं
नहीं कर सकते इसका उपयोग करें 11 सदस्य वैरिएबल आरंभ सदस्य चर के प्रत्यक्ष प्रारंभ को अनुमति देता है
सदस्य चर के सीधे शब्द प्रारंभ करने की अनुमति नहीं देता 12 < ऑब्जेक्ट क्रिएशन ऑब्जेक्ट सृजन के दौरान कीवर्ड 'न्यू' का उपयोग करना जरूरी है ऑब्जेक्ट सृजन के दौरान कीवर्ड 'न्यू' का उपयोग करने के लिए वैकल्पिक है
13 कब का उपयोग करें? बड़े और जटिल वस्तुओं के लिए बेहतर जहां वंशानुक्रम की आवश्यकता होती है छोटे और सरल वस्तुओं के लिए बेहतर जहां वंशानुक्रम कम महत्व का होता है
हमने लगभग कक्षा और संरचना के बीच सभी मतभेदों को कवर किया है, और अगर आपको लगता है कि कुछ गुम है, तो कृपया हमें बताएं। चलो एक साथ सीखते हैं और उस ज्ञान का सबसे ज्यादा फायदा उठाते हैं!