कक्षा बनाम संरचना


12

C ++ और अन्य प्रभावित भाषाओं में संरचना ( struct) नामक एक निर्माण होता है , और दूसरे को बुलाया जाता है class। दोनों फ़ंक्शन और चर रखने में सक्षम हैं। कुछ अंतर हैं:

  1. वर्ग को ढेर structमें मेमोरी दी जाती है और स्टैक में मेमोरी दी जाती है (टिप्पणी: यह सी ++ के लिए गलत है, लेकिन शायद ओपी को "प्रभावित भाषाएं" कहा जाता है)
  2. कक्षा चर डिफ़ॉल्ट रूप से निजी हैं और structवे सार्वजनिक हैं

मेरा सवाल है: क्या structकिसी तरह कक्षा के लिए छोड़ दिया गया था ? यदि हां, तो क्यों? उपरोक्त अंतरों के अलावा, structसभी एक ही चीजें कर सकते हैं जो एक वर्ग करता है। तो इसका त्याग क्यों?


परित्याग से मेरा मतलब था कि एक का उपयोग दूसरे पर क्यों किया जाता है।
prometheuspk

आपके प्रश्न का उत्तर मुझे यही लगता है।
उमैर ए।

3
वर्गों और संरचनाओं के बीच का अंतर भाषा-निर्भर है। C ++ से कुछ सबक वास्तव में C # पर लागू नहीं होते हैं।
जॉब

6
Uhhhh। C ++ में आप स्टैक या हीप पर ऑब्जेक्ट्स आवंटित कर सकते हैं। जहाँ भी तुम चाहो।
जोजो

8
गलत, गलत, गलत। स्टैक बनाम हीप का अंतर से कोई लेना- देना नहीं है।
Aaronaught

जवाबों:


11

इसे बिलकुल भी नहीं छोड़ा जाता है। वास्तव में, यहां तक ​​कि सी # जैसी आधुनिक भाषाएं, जो classअभी भी आपको भारी लाभ देती हैं struct। जब तक यह एक दूसरे को चुनने के लिए उपयोगी है, मैं आपको इस लेख का संदर्भ देता हूं:

कक्षाओं और संरचनाओं के बीच चयन

MSDN लेख से उद्धृत:

एक वर्ग के बजाय एक संरचना को परिभाषित करने पर विचार करें यदि प्रकार के उदाहरण छोटे और आमतौर पर अल्पकालिक हैं या आमतौर पर अन्य वस्तुओं में एम्बेडेड हैं।

किसी संरचना को तब तक परिभाषित न करें जब तक कि प्रकार में निम्नलिखित विशेषताएं न हों:

  • यह तार्किक रूप से आदिम प्रकारों (पूर्णांक, डबल, और इसी तरह) के समान एकल मूल्य का प्रतिनिधित्व करता है।
  • इसका एक उदाहरण आकार 16 बाइट्स से छोटा है।
  • यह अपरिवर्तनीय है।
  • इसे बार-बार बॉक्सिंग नहीं करना पड़ेगा।

4
यह उत्तर वास्तव में .Net / C # संरचना / वर्ग का अर्थ C ++ एक से भिन्न है: वे एक ही नाम का उपयोग करते हैं, लेकिन भाषा के आधार पर अलग-अलग शब्दार्थ होते हैं !!! C ++ में संरचना और वर्ग के बीच लगभग कोई अंतर नहीं है और प्रश्न पहले बिंदु पर पूरी तरह से गलत है, जो c # और D में सही है लेकिन c ++ में नहीं है। तो इस लेख का लिंक, जो .Net के बारे में है, वास्तव में गलत है। यह C ++ नहीं है!
Klaim

@ तकनीकी रूप से इसकी सी # के लिए सही नहीं है या तो (संरचना ढेर पर हो सकती है) सी # में महत्वपूर्ण अंतर मूल्य शब्दार्थ और संदर्भ शब्दार्थ के बीच है, एक भेद जिसे C ++ की आवश्यकता नहीं है क्योंकि इसमें कुछ भी मान या संदर्भ हो सकते हैं
jk।

17

आप सी ++ के बारे में गलत हैं: वर्ग और संरचना के बीच एकमात्र महत्वपूर्ण अंतर डिफ़ॉल्ट एक्सेस स्पेसियर अंतर है। संरचना और वर्ग सभी इरादों और उद्देश्यों के पर्यायवाची हैं, मेरा मानना ​​है कि संरचना को सी के लिए पीछे की संगतता के लिए रखा गया है।


7
न सिर्फ़। संरचना एक अच्छा विकल्प है जब आप सिर्फ एक वस्तु में डेटा का एक गुच्छा डंप करना चाहते हैं और इसमें कोई व्यवहार नहीं जोड़ते हैं।
मात्रा_देव

2
@ क्वेंट: यह एक संरचना का उपयोग करने के लिए एक भयानक कारण है। मुझे वास्तव में उम्मीद है कि टिप्पणी जीभ-इन-गाल थी।
एरोन

1
@Aaronaught क्यों? संरचना के उपयोग पर मेरा दृष्टिकोण काफी मानक है, उदाहरण के लिए यह उत्तर देखें: stackoverflow.com/questions/54585/…
quant_dev

1
@Aaronaught आप कई मान कैसे लौटाते हैं? कहते हैं, एक समर्थक मॉडल साफ कीमत, गंदे मूल्य और अर्जित भुगतान का योग लौटाता है।
क्वांट_देव

1
@quant_dev - आप अपने उद्देश्यों के लिए (और पूर्व सी प्रोग्रामर के लिए जो वास्तव में बहुत मायने रखता है) के लिए कुछ मेटा-अर्थ को एक संरचना में संलग्न करने का निर्णय ले सकते हैं, लेकिन यह इस तथ्य को नहीं बदलता है कि संरचना और केवल के बीच का अंतर C ++ में क्लास कीवर्ड डिफ़ॉल्ट एक्सेस है।
जोरिस टिम्मरमन्स

2

भाषा डी ने वर्ग और संरचना के बीच एक बड़ा अंतर पैदा किया है

डी में एक संरचना कुछ भी नहीं है, लेकिन कुछ कार्यों के साथ एक स्टैक आवंटित डेटा रिकॉर्ड है जिसे आप कॉल कर सकते हैं ( विरासत के लिए कोई विकल्प नहीं है जब तक आप एक एनम + यूनियन सेटअप का उपयोग नहीं करते हैं, यानी बहुदेववाद खुद को लागू करते हैं) जो मूल्य द्वारा पारित किया जाता है

एक वर्ग ऐसा है जैसे हम उपयोग किए जाते हैं: वर्चुअल फ़ंक्शंस, ढेर आवंटन, (एकल) उत्तराधिकार, रेफरी द्वारा पारित

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.