2012-06-12 14 views
9

मैंने हमेशा एक निश्चित आकार की वस्तु के रूप में एक संरचना के बारे में सोचा है और जबकि कोई चमकदार कंपाइलर त्रुटियां प्रतीत नहीं होती हैं, तो मैं सोच रहा था कि ऐसा करना आम तौर पर अच्छा अभ्यास है। क्या कक्षा में संरचना को और अधिक सलाह दी जा सकती है या क्या एक संरचना भी उतनी ही अच्छी होगी?क्या यह संभव है/एक संरचना में एक वेक्टर स्टोर करने की सलाह दी है? सी ++

कोड, सिर्फ इसलिए कि लोग उधम मचाते मिलती है:

struct Sprite 
{ 
    float x; 
    float y; 
    std::vector<Sprite> sprite; 
} 

है कि मैं क्या कर रहा हूँ अभिभावक के रूप में एक ही प्रकार के रूप में एक वर्ग के बच्चों को हो रही है का सार। जब माता-पिता मर जाते हैं, तो बच्चे भी करते हैं।

+7

ए 'स्ट्रक्चर' सिर्फ 'क्लास' के बजाय 'सार्वजनिक' की डिफ़ॉल्ट दृश्यता वाला एक वर्ग है। –

+2

ध्यान दें कि एक संरचना के लिए निर्माता/विनाशक के साथ सदस्यों को जोड़ने से संकलक संरचना के लिए एक कन्स्ट्रक्टर/विनाशक उत्सर्जित करता है। सी-शैली तकनीक जो पीओडी संरचनाओं को दर्शाती है, काम नहीं करेगी। –

+0

संरचना के अंदर एक वेक्टर संग्रहीत करने से यह अपना आकार बदल नहीं जाता है। वेक्टर के सामान ढेर पर संग्रहीत होते हैं, इसलिए संरचना का आकार वही रहता है, भले ही वेक्टर में 0 या 1000 तत्व हों। – mfontanini

उत्तर

15

एक std::vector का एक विशिष्ट ज्ञात आकार है, और इसमें कोई वर्ग या संरचना है जिसमें इसका विशिष्ट ज्ञात आकार है। std::vector एक चर आकार के सरणी के रूप में कार्य करने के लिए ढेर पर स्मृति आवंटित करता है और कहा गया स्मृति के लिए एक सूचक संग्रहीत करता है। एक संरचना और कक्षा के बीच एकमात्र अंतर यह है कि एक संरचना डिफ़ॉल्ट रूप से सार्वजनिक है, और एक वर्ग डिफ़ॉल्ट रूप से निजी है।

+0

धन्यवाद। यह निश्चित रूप से समझ में आता है कि वेक्टर केवल ढेर में स्मृति के सूचक के रूप में कार्य करेगा। विस्तृत जवाब के लिए शुक्रिया। –

+0

डिफ़ॉल्ट रूप से? डिफ़ॉल्ट रूप से? – Inverse

7

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