वाक्य - विन्यास:
class Sample
{
public:
int Sam_x;
int Sam_y;
Sample(): Sam_x(1), Sam_y(2) /* Classname: Initialization List */
{
// Constructor body
}
};
प्रारंभिक सूची की आवश्यकता:
class Sample
{
public:
int Sam_x;
int Sam_y;
Sample() */* Object and variables are created - i.e.:declaration of variables */*
{ // Constructor body starts
Sam_x = 1; */* Defining a value to the variable */*
Sam_y = 2;
} // Constructor body ends
};
उपरोक्त कार्यक्रम में, जब क्लास के कंस्ट्रक्टर को निष्पादित किया जाता है, तो Sam_x और Sam_y बनाए जाते हैं। फिर कंस्ट्रक्टर बॉडी में, उन सदस्य डेटा चर को परिभाषित किया जाता है।
बक्सों का इस्तेमाल करें:
- एक कक्षा में कांस्टेबल और संदर्भ चर
सी में, चर को निर्माण के दौरान परिभाषित किया जाना चाहिए। उसी तरह C ++ में, हमें प्रारंभ सूची का उपयोग करके ऑब्जेक्ट निर्माण के दौरान कॉन्स्ट और रेफरेंस वैरिएबल को इनिशियलाइज़ करना चाहिए। अगर हम ऑब्जेक्ट क्रिएशन (इनसाइड कंस्ट्रक्टर बॉडी) के बाद इनिशियलाइज़ेशन करते हैं, तो हमें कंपाइल टाइम एरर मिलेगा।
नमूना 1 (बेस) वर्ग के सदस्य ऑब्जेक्ट जिसमें डिफ़ॉल्ट कंस्ट्रक्टर नहीं है
class Sample1
{
int i;
public:
Sample1 (int temp)
{
i = temp;
}
};
// Class Sample2 contains object of Sample1
class Sample2
{
Sample1 a;
public:
Sample2 (int x): a(x) /* Initializer list must be used */
{
}
};
व्युत्पन्न वर्ग के लिए वस्तु बनाते समय जो आंतरिक रूप से व्युत्पन्न वर्ग निर्माणकर्ता को बुलाता है और बेस क्लास कंस्ट्रक्टर (डिफ़ॉल्ट) कहता है। यदि बेस क्लास में डिफॉल्ट कंस्ट्रक्टर नहीं है, तो उपयोगकर्ता को कंपाइल टाइम एरर मिलेगा। बचने के लिए, हमारे पास होना चाहिए
1. Default constructor of Sample1 class
2. Initialization list in Sample2 class which will call the parametric constructor of Sample1 class (as per above program)
क्लास कंस्ट्रक्टर का पैरामीटर नाम और क्लास का डेटा सदस्य समान हैं:
class Sample3 {
int i; /* Member variable name : i */
public:
Sample3 (int i) /* Local variable name : i */
{
i = i;
print(i); /* Local variable: Prints the correct value which we passed in constructor */
}
int getI() const
{
print(i); /*global variable: Garbage value is assigned to i. the expected value should be which we passed in constructor*/
return i;
}
};
जैसा कि हम सभी जानते हैं कि स्थानीय चर सर्वोच्च प्राथमिकता वाले वैश्विक चर हैं यदि दोनों चर समान नाम वाले हैं। इस स्थिति में, प्रोग्राम "i" मान {बाएं और दाएं दोनों तरफ चर। यानी: i = i} नमूना 3 में स्थानीय चर के रूप में () निर्माता और वर्ग सदस्य चर (i) ओवरराइड हो गया। से बचने के लिए, हमें या तो उपयोग करना चाहिए
1. Initialization list
2. this operator.