C++ में निर्माता के प्रारंभ सूची है, जो जहां और आधार वर्ग 'निर्माता बुलाना चाहिए कर सकते हैं और जहां भी डेटा सदस्यों को प्रारंभ करना चाहिए की एक अवधारणा है। प्रारंभिक सूची एक कोलन के बाद, और कन्स्ट्रक्टर के शरीर से पहले निर्माता हस्ताक्षर के बाद आता है। मान लीजिए कि हम एक वर्ग एक करते हैं:
class A : public B
{
public:
A(int a, int b, int c);
private:
int b_, c_;
};
फिर, बी संभालने एक निर्माता है जो एक पूर्णांक लेता है, एक के निर्माता इस तरह दिखना हो सकता है:
A::A(int a, int b, int c)
: B(a), b_(b), c_(c) // initialization list
{
// do something
}
आप देख सकते हैं, के निर्माता बेस क्लास प्रारंभिक सूची में बुलाया जाता है। प्रारंभिक सूची में डेटा सदस्यों को प्रारंभ करना, वैसे, कन्स्ट्रक्टर के शरीर के अंदर b_, और c_ के मानों को असाइन करना बेहतर है, क्योंकि आप असाइनमेंट की अतिरिक्त लागत को सहेज रहे हैं।
ध्यान रखें, डेटा सदस्यों को हमेशा प्रारंभिक सूची में उनके आदेश के बावजूद, कक्षा परिभाषा में घोषित किया गया क्रम में प्रारंभ किया जाता है। अजीब बग से बचने के लिए, जो उत्पन्न हो सकता है यदि आपके डेटा सदस्य एक-दूसरे पर निर्भर करते हैं, तो आपको हमेशा यह सुनिश्चित करना चाहिए कि सदस्यों का क्रम प्रारंभिक सूची और वर्ग परिभाषा में समान है। इसी कारण से बेस क्लास कन्स्ट्रक्टर प्रारंभिक सूची में पहला आइटम होना चाहिए। यदि आप इसे पूरी तरह से छोड़ देते हैं, तो बेस क्लास के लिए डिफ़ॉल्ट कन्स्ट्रक्टर स्वचालित रूप से कॉल किया जाएगा। उस स्थिति में, यदि बेस क्लास में डिफॉल्ट कन्स्ट्रक्टर नहीं है, तो आपको एक कंपाइलर त्रुटि मिल जाएगी।
मैं सुपर क्लास निर्माता से 'स्पष्ट' हटा दिया। सिंगल-तर्क कन्स्ट्रक्टर के लिए सबसे अच्छा अभ्यास होने के बावजूद, यह चर्चा के लिए जर्मन नहीं था। स्पष्ट कुंजी शब्द के बारे में अधिक जानकारी के लिए, देखें: http://weblogs.asp.net/kennykerr/archive/2004/08/31/Explicit-Constructors.aspx – luke
कोलन: ऑपरेटर आप बच्चे को तत्काल करने से पहले सुपरक्लास कन्स्ट्रक्टर का आह्वान करते थे वर्ग निर्माता, मुझे लगता है कि यह विधियों के लिए भी सच है? – ha9u63ar
@hagubear, केवल रचनाकारों के लिए मान्य है, AFAIK – luke