const
और संदर्भ चर को उनके द्वारा घोषित लाइन पर प्रारंभ किया जाना चाहिए।
class Something
{
private:
const int m_nValue;
public:
Something()
{
m_nValue = 5;
}
};
कोड के बराबर होगा;
const int nValue; // error, const vars must be assigned values immediately
nValue = 5;
निर्माता के शरीर में स्थिरांक या संदर्भ सदस्य चर मान आवंटित पर्याप्त नहीं है।
सी ++ सदस्य चर को प्रारंभ करने का एक और तरीका प्रदान करता है जो सदस्य चर को प्रारंभ करने के बजाय बाद में बनाए जाने की अनुमति देता है। यह प्रारंभिक सूची के उपयोग के माध्यम से किया जाता है।
आप वैरिएबल को मानों को दो तरीकों से असाइन कर सकते हैं: स्पष्ट रूप से और निहित: क्लिपबोर्डप्रिंट पर सादेकॉपी देखें?
int nValue = 5; // explicit assignment
double dValue(4.7); // implicit assignment
प्रारंभिक सूची का उपयोग करना निहित असाइनमेंट करने के समान ही है।
याद रखें कि सदस्य प्रारंभिक सूची, आधार और सदस्य डेटा ऑब्जेक्ट्स को प्रारंभ करने के लिए उपयोग की जाती है, परिभाषा में है, कन्स्ट्रक्टर की घोषणा नहीं।
cpp-tutorial और Code Wrangler पर अधिक।
आपके पहले उत्तर के लिए बधाई देता है ...^_^ – paercebal
नंबर 2 के बारे में बधाई। ASFAIK यह केवल डिफ़ॉल्ट ctors के साथ गैर-निर्मित प्रकार के लिए सच है। मैं कहूंगा कि सूची 1 के ऊपर जो कहा गया है उसके साथ नंबर 1 प्रश्न के उत्तर देने के लिए पर्याप्त है। वैसे भी, मेरे द्वारा अच्छा जवाब +1! –
@AndreasMagnusson: C++ 11 से पहले, शुरुआती प्रारंभिक सूची में नामित सभी सदस्यों के लिए डिफ़ॉल्ट प्रारंभिकता नहीं की जाती है, जिसमें अंतर्निहित आदिम प्रकार शामिल हैं (जिसके लिए डिफ़ॉल्ट प्रारंभिक अर्थ "बिल्कुल प्रारंभ नहीं है")। यदि कोई (सुलभ) डिफ़ॉल्ट कन्स्ट्रक्टर नहीं है, तो यह एक संकलित त्रुटि है। फिर ब्रेस-या-बराबर-प्रारंभकर्ताओं ने ये सब बदल दिया। –