C ++ में कंस्ट्रक्टर


जब आप कोई ऑब्जेक्ट बनाते हैं, तो आपको उसके डेटा सदस्यों को इनिशियलाइज़ करना होगा। जैसा कि आप जानते हैं, वर्ग के सार्वजनिक सदस्य कार्यों का उपयोग करके निजी और संरक्षित डेटा सदस्यों को कक्षा के बाहर पहुँचा जा सकता है। C ++ एक विशेष फ़ंक्शन प्रदान करता है, जिसे कहा जाता है निर्माता, जो किसी वस्तु का आरंभीकरण करता है। एक कंस्ट्रक्टर एक विशेष फ़ंक्शन है जिसे हर बार जब आप एक ऑब्जेक्ट बनाते हैं, तो कहा जाता है।

एक निर्माता एक सार्वजनिक सदस्य फ़ंक्शन है जिसका वर्ग के नाम के समान नाम है। उदाहरण के लिए, यदि आप एक निर्माणकर्ता बनाना चाहते हैं व्यक्ति पिछले विषयों से कक्षा:

class Person
{
private:
	string firstName;
	string lastName;
	int yearOfBirth;
};

निर्माणकर्ता का नाम होगा व्यक्ति.

डिफ़ॉल्ट निर्माता

एक डिफ़ॉल्ट निर्माण एक कंस्ट्रक्टर है, जिसमें कोई पैरामीटर नहीं है। एक वस्तु घोषित करने के बाद इसे कहा जाता है। यहाँ व्यक्ति वर्ग के लिए एक डिफ़ॉल्ट निर्माता का एक उदाहरण है:

Person::Person()
{
	cout << "Default constructor is starting" << endl;
}

अब हम एक व्यक्ति वर्ग की एक वस्तु की घोषणा कर सकते हैं:
Person person1;//declare a person

उपरोक्त कथन में, डिफॉल्ट कंस्ट्रक्टर को बुलाया जाएगा और आप निम्नलिखित आउटपुट देखेंगे:

डिफ़ॉल्ट कंस्ट्रक्टर शुरू हो रहा है

डिफ़ॉल्ट कंस्ट्रक्टर का उपयोग कुछ संसाधनों को तैयार करने या स्मृति के आवंटन के लिए किया जा सकता है इससे पहले कि आप किसी वस्तु के साथ काम करना शुरू कर दें।

परिमापक संवाहक

पैरामीटर के साथ कंस्ट्रक्टर का उपयोग ऑब्जेक्ट के डेटा सदस्यों को इनिशियलाइज़ करने के लिए किया जा सकता है। पैरामीटर के साथ एक निर्माता बनाने के लिए आपको कोष्ठक में इसके मापदंडों को निर्दिष्ट करना होगा जैसा कि हम किसी फ़ंक्शन के मापदंडों को निर्दिष्ट करने के लिए करते हैं। यह व्यक्ति वर्ग के लिए तीन मापदंडों के साथ एक निर्माता का एक उदाहरण है:

Person::Person(string fName, string lName, int year)
{
	cout << "Constructor with 3 parameters is starting" << endl;
	//set data members according to the parameters
	firstName = fName;
	lastName = lName;
	yearOfBirth = year;
}

अब आप व्यक्तिगत वर्ग की वस्तुओं को एक बार तैयार कर सकते हैं।
//use constructor with three parameters
Person person2("Smith", "James", 1992);

ध्यान दें कि कोष्ठक का उपयोग वस्तु घोषणा के बाद किया जाता है। आप निर्माणकर्ता को उसी तरह से घोषणा के बाद पैरामीटर दे रहे हैं जैसे आप मापदंडों के साथ एक फ़ंक्शन कहते हैं। इस मामले में, आपको कंस्ट्रक्टर को स्पष्ट रूप से कॉल करने की आवश्यकता नहीं है। किसी वस्तु को घोषित करने के ठीक बाद हम पैरामीटर पास करते हैं।

एक बार कोड की यह लाइन निष्पादित हो जाएगी, तो आपको निम्नलिखित आउटपुट दिखाई देंगे:

3 मापदंडों के साथ कंस्ट्रक्टर शुरू हो रहा है

यदि कंस्ट्रक्टर ठीक से काम करता है तो हम यह जांचने के लिए एक साधारण प्रिंट मेम्बर फ़ंक्शन जोड़ सकते हैं:

void Person::print()
{
	cout << "First name " << firstName << endl;
	cout << "Last name " << lastName << endl;
	cout << "Year of Birth " << yearOfBirth << endl;
}

Person2 बनने के बाद अब कॉल प्रिंट फंक्शन:
person2.print();

आप निम्न आउटपुट देख सकते हैं:

तीन मापदंडों वाला कंस्ट्रक्टर शुरू हो रहा है

पहला नाम स्मिथ

अंतिम नाम जेम्स

जन्म का वर्ष 1992

ओवरलोडेड कंस्ट्रक्टर

हम कंस्ट्रक्टरों को ओवरलोड भी कर सकते हैं। इसका मतलब है कि आप विभिन्न मापदंडों के साथ कई निर्माता बना सकते हैं। यहाँ व्यक्ति वर्ग के एक अन्य निर्माता का एक उदाहरण है, जो केवल दो तर्क देता है:

Person::Person(string fName, int year)
{
	firstName = fName;
	lastName = "Unknown";
	yearOfBirth = year;
}

जैसा कि आप देख सकते हैं, यह निर्माता केवल दो डेटा सदस्य सेट करता है। अंतिम नाम अज्ञात है। मान इस मामले में डिफ़ॉल्ट रूप से "अज्ञात" पर सेट है। ऐसे उद्देश्यों के लिए, आप कंस्ट्रक्टर मापदंडों के लिए डिफ़ॉल्ट मानों का उपयोग कर सकते हैं। उदाहरण के लिए, आप के लिए डिफ़ॉल्ट मान सेट करना चाहते हैं जन्म का साल 1990. इस मामले में, तीन मापदंडों के साथ व्यक्ति वर्ग के निर्माण की घोषणा निम्न तरीके से होगी:
Person(string fName, string lName, int year = 1990);

अब आप केवल दो स्ट्रिंग पैरामीटर के साथ व्यक्ति ऑब्जेक्ट बना सकते हैं। इस स्थिति में, वर्ष 1900 पर सेट किया जाएगा:
Person person3("Green", "Alan");
person3.print();

आप देख सकते हैं कि वर्ष 1990 के लिए स्वचालित रूप से सेट है:

3 मापदंडों के साथ कंस्ट्रक्टर शुरू हो रहा है

पहला नाम ग्रीन

अंतिम नाम एलन

जन्म का वर्ष 1990

कापी कंस्ट्रक्टर