2011-11-22 10 views
7
class gene{ 
    int ind; 

    gene() { 
     ind = 0; 
    } 
} 

class network { 
    gene g[10]; 
} 

main() { 
    network n; 
} 

क्या मुझे जी सरणी में प्रत्येक ऑब्जेक्ट के लिए कन्स्ट्रक्टर को कॉल करना चाहिए, या इसे स्वचालित रूप से बुलाया जाएगा?क्या निर्माता को कक्षा के सदस्य के रूप में वस्तुओं की एक सरणी के लिए तुरंत बुलाया जाता है?

उदा, मैं इस प्रकार नेटवर्क वर्ग बदलना चाहिए:,

class network { 
    gene g[10]; 

    network() { 
     for(int i = 0; i < 10; i++) 
      g[i] = gene(); 
    } 
} 
+2

यदि यह पहले से निर्माण नहीं किया गया था, अपने परिवर्तन एक आपदा होगा: आप मूल्य प्रारंभ बजाय का उपयोग करना चाहते हैं। आप एक unconstructed वस्तु पर 'ऑपरेटर =' बुला रहे होंगे। –

+2

मैं snarky होने की कोशिश नहीं कर रहा हूँ, लेकिन उस समय में आप सवाल पूछने के लिए लिया, आप इसका परीक्षण कर सकते थे। –

+3

@ स्टेव: परीक्षण केवल एक संकलक के व्यवहार को साबित करेगा, जो कि मानक द्वारा गारंटीकृत नहीं है। – ildjarn

उत्तर

7

आपके मामले में क्योंकि gene एक गैर तुच्छ डिफ़ॉल्ट निर्माता है, सरणी के प्रत्येक तत्व डिफ़ॉल्ट-निर्माण के लिए किया जाएगा। यानी, नहीं, आपका परिवर्तन अनावश्यक है।

परिस्थिति में कि आपके सरणी के अंतर्निहित प्रकार एक पीओडी प्रकार है, तो आप मैन्युअल रूप से तत्वों को प्रारंभ करने की आवश्यकता है। हालांकि, जिस तरह से आप इसे कर रहे हैं वह आदर्श नहीं है;

class network { 
    somePodType x[10]; 
public: 
    network() : x() { } 
}; 
संबंधित मुद्दे

 संबंधित मुद्दे