कंस्ट्रक्टर (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
वर्ग आधारित प्रोग्रामिंग में क्लास-बेस्डवंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग), एक कंस्ट्रक्टर (संक्षिप्त नाम: ctor) एक विशेष प्रकार का सबरूटीन है जिसे वस्तु निर्माण कहा जाता है। यह उपयोग के लिए नई वस्तु तैयार करता है, अक्सर पैरामीटर (कंप्यूटर प्रोग्रामिंग) को स्वीकार करता है जिसे निर्माता आवश्यक सदस्य चर सेट करने के लिए उपयोग करता है।
एक कंस्ट्रक्टर एक विधि (कंप्यूटर विज्ञान) जैसा दिखता है, लेकिन यह एक विधि से भिन्न होता है जिसमें इसका कोई स्पष्ट रिटर्न प्रकार नहीं होता है, यह निहित रूप से वंशानुक्रम (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग) नहीं होता है और इसमें आमतौर पर स्कोप संशोधक के लिए अलग नियम होते हैं। कंस्ट्रक्टर्स का अक्सर डिक्लेयरिंग कक्षा (कंप्यूटर विज्ञान) के समान नाम होता है। उनके पास ऑब्जेक्ट के डेटा सदस्यों को इनिशियलाइज़ेशन (कंप्यूटिंग) करने और वर्ग अपरिवर्तनीय को स्थापित करने का कार्य है, यदि इनवेरिएंट अमान्य है तो विफल हो जाता है। एक ठीक से लिखा हुआ कंस्ट्रक्टर परिणामी वस्तु (कंप्यूटर विज्ञान) को 'वैध' स्थिति में छोड़ देता है। कंस्ट्रक्टर में अपरिवर्तनीय वस्तुओं को आरंभीकृत किया जाना चाहिए।
अधिकांश भाषाएं कंस्ट्रक्टर को ओवरलोड करने की विधि की अनुमति देती हैं, जिसमें अलग-अलग मापदंडों के साथ एक वर्ग के लिए एक से अधिक कंस्ट्रक्टर हो सकते हैं। कुछ भाषाएँ कुछ विशेष प्रकार के कंस्ट्रक्टरों पर विचार करती हैं। कन्स्ट्रक्टर, जो वस्तुओं को बनाने के लिए ठोस रूप से एकल वर्ग का उपयोग करते हैं और कक्षा का एक नया उदाहरण लौटाते हैं, फैक्टरी (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) द्वारा सारणित होते हैं, जो ऑब्जेक्ट भी बनाते हैं लेकिन कई वर्गों या विभिन्न आवंटन योजनाओं का उपयोग करके विभिन्न तरीकों से ऐसा कर सकते हैं। जैसे वस्तु पूल।
प्रकार
पैरामीटरयुक्त निर्माता
कंस्ट्रक्टर जो कम से कम एक तर्क ले सकते हैं उन्हें पैरामिट्रीकृत कंस्ट्रक्टर कहा जाता है। जब किसी ऑब्जेक्ट को पैरामीटरयुक्त कन्स्ट्रक्टर में घोषित किया जाता है, तो प्रारंभिक मानों को कन्स्ट्रक्टर फ़ंक्शन के तर्कों के रूप में पारित किया जाना चाहिए। वस्तु घोषणा का सामान्य तरीका काम नहीं कर सकता है। कंस्ट्रक्टर को स्पष्ट या निहित रूप से कहा जा सकता है। कंस्ट्रक्टर को निहित रूप से कॉल करने की विधि को शॉर्टहैंड विधि भी कहा जाता है।
<वाक्यविन्यास लैंग = सीपीपी> वर्ग उदाहरण {
जनता: उदाहरण(); उदाहरण (इंट ए, इंट बी); // पैरामिट्रीकृत कंस्ट्रक्टर।
निजी: इंट x_; इंट वाई_;
};
उदाहरण :: उदाहरण () = डिफ़ॉल्ट;
उदाहरण :: उदाहरण (int x, int y): x_(x), y_(y) {} </वाक्यविन्यास हाइलाइट>
<वाक्यविन्यास लैंग = सीपीपी> उदाहरण ई = उदाहरण (0, 50); // स्पष्ट कॉल। उदाहरण ई2(0, 50); // अंतर्निहित कॉल। </वाक्यविन्यास हाइलाइट>
डिफ़ॉल्ट निर्माता
यदि प्रोग्रामर तात्कालिक वर्ग के लिए एक कंस्ट्रक्टर की आपूर्ति नहीं करता है, तो जावा कंपाइलर आपकी ओर से आपके कोड में एक डिफॉल्ट कंस्ट्रक्टर सम्मिलित करता है। इस कंस्ट्रक्टर को डिफॉल्ट कंस्ट्रक्टर के रूप में जाना जाता है। आप इसे अपने स्रोत कोड (जावा फ़ाइल) में नहीं पाएंगे क्योंकि यह संकलन के दौरान कोड में डाला जाएगा और .class फ़ाइल में मौजूद होगा। डिफ़ॉल्ट कन्स्ट्रक्टर का व्यवहार भाषा निर्भर है। यह डेटा सदस्यों को शून्य या अन्य समान मानों से प्रारंभ कर सकता है, या यह कुछ भी नहीं कर सकता है। जावा में, एक डिफॉल्ट कंस्ट्रक्टर एक अशक्त कंस्ट्रक्टर को संदर्भित करता है जो कंपाइलर द्वारा स्वचालित रूप से उत्पन्न होता है यदि क्लास के लिए कोई कंस्ट्रक्टर परिभाषित नहीं किया गया है या किसी प्रोग्रामर-परिभाषित कंस्ट्रक्टर की अनुपस्थिति में (जैसे जावा में, डिफॉल्ट कंस्ट्रक्टर सुपरक्लास के अशक्त को कॉल करता है) कन्स्ट्रक्टर, फिर एक खाली निकाय निष्पादित करता है)। सभी फ़ील्ड 0 (पूर्णांक प्रकार), 0.0 (फ़्लोटिंग-पॉइंट प्रकार), गलत (बूलियन प्रकार), या अशक्त (संदर्भ प्रकार) के प्रारंभिक मान पर छोड़े गए हैं।
<वाक्यविन्यास लैंग = सीपीपी>
- शामिल <iostream>
कक्षा छात्र {
जनता: छात्र (इंट ए = 0, इंट बी = 0); // डिफ़ॉल्ट कंस्ट्रक्टर।
इंट ए; इंट बी;
}; </वाक्यविन्यास हाइलाइट>
कन्स्ट्रक्टर कॉपी करें
C++ की तरह Java भी Copy Constructor को सपोर्ट करता है। लेकिन, सी ++ के विपरीत, यदि आप अपना खुद का नहीं लिखते हैं तो जावा डिफ़ॉल्ट कॉपी कन्स्ट्रक्टर नहीं बनाता है। कॉपी कंस्ट्रक्टर्स क्लास ऑब्जेक्ट्स को कॉपी करते समय कंपाइलर द्वारा की जाने वाली क्रियाओं को परिभाषित करते हैं। एक कॉपी कंस्ट्रक्टर में एक औपचारिक पैरामीटर होता है जो कि वर्ग का प्रकार होता है (पैरामीटर किसी वस्तु का संदर्भ हो सकता है)। इसका उपयोग उसी वर्ग की मौजूदा वस्तु की प्रतिलिपि बनाने के लिए किया जाता है। भले ही दोनों वर्ग समान हैं, यह रूपांतरण निर्माता के रूप में गिना जाता है। जबकि कॉपी कंस्ट्रक्टर आमतौर पर संक्षिप्त कॉपी ctor या cctor होते हैं, उनका उसी संक्षिप्त नाम का उपयोग करके .NET में उपयोग किए जाने वाले क्लास कंस्ट्रक्टर्स से कोई लेना-देना नहीं होता है।
रूपांतरण निर्माता
कनवर्ज़न कन्स्ट्रक्टर एक कंपाइलर के लिए एक अलग प्रकार की वस्तु के आधार पर एक वर्ग से संबंधित वस्तु को स्पष्ट रूप से बनाने के लिए एक साधन प्रदान करते हैं। इन कंस्ट्रक्टरों को आमतौर पर तर्कों या ऑपरेंड को एक उपयुक्त प्रकार में बदलने के लिए लागू किया जाता है, लेकिन उन्हें स्पष्ट रूप से भी कहा जा सकता है।
कन्स्ट्रक्टर ले जाएं
C++ में, कन्स्ट्रक्टर ले जाएं (सी ++)C++) वर्ग के किसी ऑब्जेक्ट के लिए Rvalue संदर्भ लेता है, और पैरामीटर ऑब्जेक्ट के संसाधनों के स्वामित्व हस्तांतरण को लागू करने के लिए उपयोग किया जाता है।
सिंटेक्स
- जावा (प्रोग्रामिंग भाषा), सी ++, सी शार्प (प्रोग्रामिंग भाषा)|सी#, ActionScript, PHP 4 और MATLAB का एक नामकरण सम्मेलन है जिसमें निर्माणकर्ताओं का नाम उसी वर्ग के समान होता है जिसके साथ वे जुड़े होते हैं।
- PHP 5 में, कंस्ट्रक्टर के लिए अनुशंसित नाम है
__construct
. पश्चगामी संगतता के लिए, कक्षा के समान नाम वाली विधि को if कहा जाएगा__construct
विधि नहीं मिल सकती। PHP 5.3.3 के बाद से, यह केवल गैर-नामित वर्गों के लिए काम करता है।[1] - PHP 7 में, आपको हमेशा कंस्ट्रक्टर का नाम इस प्रकार रखना चाहिए
__construct
. वर्ग के समान नाम वाली विधियाँ E_DEPRECATED स्तर की त्रुटि को ट्रिगर करेंगी।[1] - पर्ल में, कंस्ट्रक्टर्स को, कन्वेंशन द्वारा, नया नाम दिया जाता है और उन्हें उचित मात्रा में ऑब्जेक्ट क्रिएशन करना होता है।
- पर्ल के लिए मूस पर्ल में, कंस्ट्रक्टर्स (नया नाम) स्वचालित रूप से बनाए जाते हैं और एक BUILD विधि निर्दिष्ट करके विस्तारित होते हैं।
- विजुअल बेसिक .NET में कंस्ट्रक्टर को कहा जाता है
New
. - पायथन (प्रोग्रामिंग लैंग्वेज) में, कंस्ट्रक्टर को दो तरीकों से विभाजित किया जाता है,
__new__
और__init__
.__new__
e> विधि उदाहरण के लिए मेमोरी आवंटित करने के लिए ज़िम्मेदार है, और कक्षा को एक तर्क के रूप में प्राप्त करती है (पारंपरिक रूप से कहा जाता हैcls
).__init__
e> विधि (जिसे अक्सर इनिशियलाइज़र कहा जाता है) नव निर्मित उदाहरण को एक तर्क के रूप में पारित किया जाता है (पारंपरिक रूप से कहा जाता हैself
).[2] - वस्तु पास्कल कंस्ट्रक्टर्स को कीवर्ड द्वारा दर्शाया जाता है
constructor
और उपयोगकर्ता-परिभाषित नाम हो सकते हैं (लेकिन ज्यादातर कहलाते हैंCreate
). - Objective-C में, कंस्ट्रक्टर विधि दो विधियों में विभाजित है,
alloc
औरinit
साथalloc
वर्ग के एक उदाहरण के लिए स्मृति को अलग (आवंटित) करने की विधि, औरinit
उदाहरण को आरंभ करने के थोक को संभालने की विधि। विधि के लिए एक कॉलnew
दोनों का आह्वान करता हैalloc
और यहinit
तरीके, वर्ग उदाहरण के लिए।
मेमोरी संगठन
Java, C#, और VB .NET में, कंस्ट्रक्टर एक विशेष मेमोरी स्ट्रक्चर में रेफरेंस टाइप ऑब्जेक्ट बनाता है जिसे कहा जाता है
ढेर (डेटा संरचना)। मूल्य प्रकार (जैसे int, double, आदि) एक अनुक्रमिक संरचना में बनाए जाते हैं जिन्हें स्टैक (सार डेटा प्रकार) कहा जाता है।
VB .NET और C# भी नए ऑपरेटर को वैल्यू टाइप ऑब्जेक्ट बनाने की अनुमति देते हैं, लेकिन ये वैल्यू टाइप ऑब्जेक्ट स्टैक पर बनाए जाते हैं, भले ही ऑपरेटर का उपयोग किया गया हो या नहीं।
सी ++ में, ऑब्जेक्ट स्टैक पर बनाए जाते हैं जब कन्स्ट्रक्टर को नए ऑपरेटर के बिना बुलाया जाता है, और ढेर पर बनाया जाता है जब कन्स्ट्रक्टर को नए ऑपरेटर के साथ बुलाया जाता है। जब वे दायरे से बाहर हो जाते हैं तो ढेर वस्तुओं को स्पष्ट रूप से हटा दिया जाता है, जबकि ढेर वस्तुओं को विनाशक द्वारा स्पष्ट रूप से या स्पष्ट रूप से हटाए गए ऑपरेटर का उपयोग करके हटा दिया जाना चाहिए।
भाषा विवरण
सी ++
C++ में कंस्ट्रक्टर का नाम क्लास का नाम होता है। यह कुछ भी नहीं लौटाता है। इसमें किसी भी विधि (कंप्यूटर प्रोग्रामिंग) जैसे पैरामीटर हो सकते हैं। कंस्ट्रक्टर फ़ंक्शंस आमतौर पर सार्वजनिक अनुभाग में घोषित किए जाते हैं, लेकिन संरक्षित और निजी अनुभागों में भी घोषित किए जा सकते हैं, यदि उपयोगकर्ता उन तक पहुँच को प्रतिबंधित करना चाहता है।
कंस्ट्रक्टर के दो भाग होते हैं। सबसे पहले प्रारंभिक सूची है जो पैरामीटर (कंप्यूटर विज्ञान) का पालन करती है और विधि निकाय से पहले होती है। यह एक बृहदान्त्र से शुरू होता है और प्रविष्टियाँ अल्पविराम से अलग होती हैं। प्रारंभकर्ता सूची की आवश्यकता नहीं है, लेकिन डेटा सदस्यों के लिए मूल्य प्रदान करने और अलग-अलग असाइनमेंट स्टेटमेंट से बचने का अवसर प्रदान करता है। प्रारंभिक सूची आवश्यक है यदि आपके पास कॉन्स्ट या संदर्भ प्रकार डेटा सदस्य हैं, या सदस्य जिनके पास पैरामीटर रहित कन्स्ट्रक्टर तर्क नहीं है। असाइनमेंट उस क्रम के अनुसार होता है जिसमें डेटा सदस्यों को घोषित किया जाता है (भले ही प्रारंभकर्ता सूची में क्रम अलग हो)।[3] दूसरा भाग बॉडी है, जो घुंघराले ब्रैकेट में संलग्न एक सामान्य विधि बॉडी है।
C++ एक से अधिक कंस्ट्रक्टर की अनुमति देता है। अन्य कंस्ट्रक्टरों के अलग-अलग पैरामीटर होने चाहिए। इसके अतिरिक्त कंस्ट्रक्टर्स जिनमें पैरामीटर होते हैं जिन्हें डिफ़ॉल्ट मान दिए जाते हैं, उन्हें प्रतिबंध का पालन करना चाहिए कि सभी पैरामीटर को डिफ़ॉल्ट मान नहीं दिया जाता है। यह एक ऐसी स्थिति है जो केवल डिफ़ॉल्ट कन्स्ट्रक्टर होने पर ही मायने रखती है। एक आधार वर्ग (या बेस क्लास) के कंस्ट्रक्टर को एक व्युत्पन्न वर्ग द्वारा भी बुलाया जा सकता है। कंस्ट्रक्टर फ़ंक्शंस विरासत में नहीं मिले हैं और उनके पते को संदर्भित नहीं किया जा सकता है। जब स्मृति आवंटन की आवश्यकता होती है, तो नए और हटाए गए ऑपरेटरों को पूरी तरह से बुलाया जाता है।
एक कॉपी कंस्ट्रक्टर में उसी प्रकार का एक पैरामीटर होता है जिसे कॉन्स्ट रेफरेंस के रूप में पास किया जाता है, उदाहरण के लिए वेक्टर (कॉन्स्ट वेक्टर और rhs)। यदि यह स्पष्ट रूप से प्रदान नहीं किया गया है, तो संकलक प्रत्येक सदस्य चर के लिए कॉपी कंस्ट्रक्टर का उपयोग करता है या आदिम प्रकारों के मामले में मूल्यों की प्रतिलिपि बनाता है। डिफ़ॉल्ट कार्यान्वयन कुशल नहीं है यदि कक्षा में सदस्यों को गतिशील रूप से आवंटित किया गया है (या अन्य संसाधनों को संभालता है), क्योंकि यह विनाश पर (या संसाधनों की दोहरी रिलीज) को हटाने के लिए डबल कॉल का कारण बन सकता है।
<वाक्यविन्यास लैंग = सीपीपी> वर्ग फूबार {
जनता: फोबार (डबल आर = 1.0, डबल अल्फा = 0.0) // कंस्ट्रक्टर, डिफ़ॉल्ट मान वाले पैरामीटर। : x_(r * cos(alpha)) // <- प्रारंभकर्ता सूची { वाई_ = आर * पाप (अल्फा); // <- सामान्य असाइनमेंट }
निजी: डबल x_; डबल वाई_;
}; </वाक्यविन्यास हाइलाइट> उदाहरण मंगलाचरण: <वाक्यविन्यास लैंग = सीपीपी> फोबार ए,
बी (3), सी (5, एम_पीआई/4);
</वाक्यविन्यास हाइलाइट>
फ़ंक्शंस से ऑब्जेक्ट वापस करने या ऑब्जेक्ट को मान से पास करने पर, ऑब्जेक्ट कॉपी कंस्ट्रक्टर को निहित रूप से कहा जाएगा, जब तक कि वापसी मूल्य अनुकूलन लागू नहीं होता।
सी ++ स्पष्ट रूप से एक डिफ़ॉल्ट कॉपी कन्स्ट्रक्टर उत्पन्न करता है जो सभी बेस क्लास और सभी सदस्य चर के लिए कॉपी कन्स्ट्रक्टर को कॉल करेगा जब तक कि प्रोग्रामर एक प्रदान नहीं करता है, स्पष्ट रूप से कॉपी कन्स्ट्रक्टर को हटा देता है (क्लोनिंग को रोकने के लिए) या बेस क्लास या सदस्य चर कॉपी कन्स्ट्रक्टर को हटा दिया जाता है या पहुँच योग्य नहीं (निजी)। अनुकूलित 'कॉपी कन्स्ट्रक्टर' (उदाहरण के लिए संदर्भ गिनती, पॉइंटर्स की गहरी प्रतिलिपि) के लिए कॉल करने वाले अधिकांश मामलों में 'विनाशक' और 'प्रतिलिपि असाइनमेंट ऑपरेटर' को अनुकूलित करने की भी आवश्यकता होती है। इसे आमतौर पर तीन का नियम (C++ प्रोग्रामिंग) कहा जाता है।
सी #
उदाहरण सी शार्प (प्रोग्रामिंग लैंग्वेज)|सी# कंस्ट्रक्टर:
<वाक्यविन्यास प्रकाश लैंग = csharp> पब्लिक क्लास MyClass {
निजी इंट ए; निजी स्ट्रिंग बी;
// कंस्ट्रक्टर सार्वजनिक MyClass (): यह (42, स्ट्रिंग) { }
// कंस्ट्रक्टर को ओवरलोड करना सार्वजनिक MyClass (इंट ए, स्ट्रिंग बी) { यह.ए = ए; यह बी = बी; }
} </वाक्यविन्यास हाइलाइट>
<वाक्यविन्यास प्रकाश लैंग = csharp> // कोड कहीं // ऊपर दिए गए कंस्ट्रक्टर के साथ किसी ऑब्जेक्ट को इंस्टेंट करना MyClass c = नया MyClass (42, स्ट्रिंग); </वाक्यविन्यास हाइलाइट>
सी # स्थिर कन्स्ट्रक्टर
C Sharp (प्रोग्रामिंग लैंग्वेज) | C# में, एक स्टैटिक कंस्ट्रक्टर एक स्टैटिक डेटा इनिशियलाइज़र है। स्टेटिक कंस्ट्रक्टर्स को क्लास कंस्ट्रक्टर्स भी कहा जाता है। चूंकि उत्पन्न वास्तविक विधि का नाम .cctor है इसलिए उन्हें अक्सर cctors भी कहा जाता है।[4][5] स्टैटिक कंस्ट्रक्टर जटिल स्टैटिक वेरिएबल इनिशियलाइज़ेशन की अनुमति देते हैं।[6] जब क्लास को पहली बार एक्सेस किया जाता है तो स्टेटिक कंस्ट्रक्टर्स को निहित रूप से कहा जाता है। किसी वर्ग (स्टेटिक या कंस्ट्रक्टर कॉल) के लिए कोई भी कॉल, स्टैटिक कंस्ट्रक्टर निष्पादन को ट्रिगर करता है। स्टेटिक कंस्ट्रक्टर थ्रेड सुरक्षित हैं और सिंगलटन पैटर्न लागू करते हैं। जब एक सामान्य प्रोग्रामिंग क्लास में उपयोग किया जाता है, तो स्थिर कंस्ट्रक्टर को हर नए जेनेरिक इंस्टेंटेशन पर प्रति प्रकार एक कहा जाता है। स्थैतिक चर भी तत्काल होते हैं।
<वाक्यविन्यास प्रकाश लैंग = csharp> पब्लिक क्लास MyClass {
निजी स्थिर int _A;
// सामान्य कंस्ट्रक्टर स्थिर MyClass () { _ए = 32; }
// स्टैंडर्ड डिफॉल्ट कंस्ट्रक्टर सार्वजनिक MyClass () {
}
} </वाक्यविन्यास हाइलाइट>
<वाक्यविन्यास प्रकाश लैंग = csharp> // कोड कहीं // ऊपर दिए गए कंस्ट्रक्टर के साथ किसी ऑब्जेक्ट को इंस्टेंट करना // तात्कालिकता से ठीक पहले // परिवर्तनीय स्थिर कन्स्ट्रक्टर निष्पादित किया गया है और _A 32 है MyClass c = नया MyClass (); </वाक्यविन्यास हाइलाइट>
सीएफएमएल
सीएफएमएल 'नामक एक विधि का उपयोग करता हैinit
'एक निर्माता विधि के रूप में।
चीज़.सीएफसी <वाक्यविन्यास लैंग = जावास्क्रिप्ट> अवयव {
// गुण संपत्ति का नाम = पनीर का नाम;
// कंस्ट्रक्टर फ़ंक्शन चीज़ इनिट (आवश्यक स्ट्रिंग चीज़नाम) { चर। पनीर नाम = तर्क। पनीर नाम; इसे वापस करो; }
} </वाक्यविन्यास हाइलाइट>
एक पनीर का उदाहरण बनाएँ। <वाक्यविन्यास लैंग = जावास्क्रिप्ट> myCheese = नया पनीर ('चेडर'); </वाक्यविन्यास हाइलाइट>
कोल्डफ्यूजन 10 के बाद से,[7] सीएफएमएल ने कन्स्ट्रक्टर विधि का नाम निर्दिष्ट करने का भी समर्थन किया है:
<वाक्यविन्यास लैंग = जावास्क्रिप्ट> घटक initmethod = पनीर {
// गुण संपत्ति का नाम = पनीर का नाम;
// कंस्ट्रक्टर फंक्शन चीज़ चीज़ (आवश्यक स्ट्रिंग चीज़नाम) { चर। पनीर नाम = तर्क। पनीर नाम; इसे वापस करो; }
} </वाक्यविन्यास हाइलाइट>
एफिल
एफिल (प्रोग्रामिंग लैंग्वेज) में, नई वस्तुओं को इनिशियलाइज़ करने वाली दिनचर्या को निर्माण प्रक्रियाएँ कहा जाता है। निर्माण प्रक्रियाओं में निम्नलिखित विशेषताएं हैं:
- निर्माण प्रक्रियाओं का कोई स्पष्ट वापसी प्रकार नहीं है (प्रक्रिया की परिभाषा के अनुसार)।[lower-alpha 1]
- निर्माण प्रक्रियाओं का नाम दिया गया है।
- निर्माण प्रक्रियाओं को कक्षा के पाठ में निर्माण प्रक्रियाओं के नाम से नामित किया गया है।
- मौजूदा वस्तुओं को फिर से शुरू करने के लिए निर्माण प्रक्रियाओं को स्पष्ट रूप से लागू किया जा सकता है।
- प्रत्येक प्रभावी (यानी, ठोस या गैर-सार) वर्ग को कम से कम एक निर्माण प्रक्रिया निर्दिष्ट करनी चाहिए।
- निर्माण प्रक्रियाओं को नए आरंभिक ऑब्जेक्ट को उस अवस्था में छोड़ देना चाहिए जो वर्ग अपरिवर्तनीय को संतुष्ट करता है।[lower-alpha 2]
हालाँकि वस्तु निर्माण में कुछ सूक्ष्मताएँ शामिल हैं,[8] एक विशिष्ट घोषणा के साथ एक विशेषता का निर्माण x: T
जैसा कि एक निर्माण निर्देश में व्यक्त किया गया है create x.make
में निम्नलिखित चरणों का क्रम शामिल है:
T
प्रकार का एक नया प्रत्यक्ष उदाहरण बनाएं।[lower-alpha 3]- नव निर्मित उदाहरण के लिए निर्माण प्रक्रिया निष्पादित करें।
- नई प्रारंभिक वस्तु को इकाई <कोड लैंग = एफिल> x </ कोड> में संलग्न करें।
नीचे दिए गए पहले स्निपेट में, वर्ग POINT
परिभाषित किया गया है। कार्यविधि make
को feature
कीवर्ड के बाद कोडित किया जाता है।
कीवर्ड create
प्रक्रियाओं की एक सूची प्रस्तुत करता है जिसका उपयोग उदाहरणों को आरंभ करने के लिए किया जा सकता है। इस मामले में सूची में default_create
, ANY
वर्ग से विरासत में मिली खाली कार्यान्वयन वाली एक प्रक्रिया, और बनाना
शामिल है कोड> प्रक्रिया कक्षा के भीतर कोडित।
<वाक्यविन्यास लैंग = एफिल> कक्षा
बिंदु
बनाएं
डिफ़ॉल्ट_क्रिएट, मेक
विशेषता
बनाना (a_x_value: REAL; a_y_value: REAL) करना एक्स := a_x_value y := a_y_value अंत
एक्स: असली - एक्स समन्वय
वाई: असली - वाई समन्वय ...
</वाक्यविन्यास हाइलाइट>
दूसरे स्निपेट में, एक वर्ग जो कि POINT
का क्लाइंट है, में my_point_1
और my_point_2
का डिक्लेरेशन होता है टाइप करें <कोड लैंग = एफिल> बिंदु </ कोड>।
प्रक्रियात्मक कोड में, my_point_1
को मूल (0.0, 0.0) के रूप में बनाया जाता है। क्योंकि कोई निर्माण प्रक्रिया निर्दिष्ट नहीं है, प्रक्रिया default_create
वर्ग ANY
से विरासत में मिली है। इस पंक्ति को create my_point_1.default_create
कोडित किया जा सकता था।
केवल निर्माण प्रक्रियाओं के रूप में नामित प्रक्रियाओं का उपयोग create
कीवर्ड वाले निर्देश में किया जा सकता है।
अगला my_point_2
के लिए एक निर्माण निर्देश है, जो my_point_2
के निर्देशांकों के लिए आरंभिक मान प्रदान करता है।
तीसरा निर्देश अलग-अलग मानों के साथ my_point_2
से जुड़े इंस्टेंस को फिर से शुरू करने के लिए make
प्रक्रिया के लिए एक सामान्य उदाहरण कॉल करता है।
<वाक्यविन्यास लैंग = एफिल>
my_point_1: बिंदु my_point_2: बिंदु ...
my_point_1 बनाएं my_point_2 बनाएं। मेक (3.0, 4.0) my_point_2. बनाना (5.0, 8.0) ...
</वाक्यविन्यास हाइलाइट>
एफ #
एफ शार्प (प्रोग्रामिंग लैंग्वेज) | एफ # में, एक कंस्ट्रक्टर में कोई भी शामिल हो सकता है let
या do
एक वर्ग में परिभाषित कथन। let
बयान निजी क्षेत्रों को परिभाषित करते हैं और do
कथन कोड निष्पादित करते हैं। अतिरिक्त कंस्ट्रक्टर का उपयोग करके परिभाषित किया जा सकता है new
कीवर्ड।
<वाक्यविन्यास लैंग = fsharp> टाइप करें MyClass(_a : int, _b : string) = class
// प्राथमिक कंस्ट्रक्टर चलो एक = _ए चलो बी = _बी do Printfn a =% i, b =% s a b
// अतिरिक्त कंस्ट्रक्टर new(_a : int) = MyClass(_a, ) फिर Printfn पूर्णांक पैरामीटर दिया गया
new(_b : string) = MyClass(0, _b) फिर Printfn स्ट्रिंग पैरामीटर दिया गया
new() = MyClass(0, ) तब Printfn कोई पैरामीटर नहीं दिया गया
अंत </वाक्यविन्यास हाइलाइट>
<वाक्यविन्यास लैंग = fsharp> // कोड कहीं // प्राइमरी कंस्ट्रक्टर के साथ किसी ऑब्जेक्ट को इंस्टेंट करना चलो सी 1 = नया MyClass (42, स्ट्रिंग)
// अतिरिक्त कंस्ट्रक्टर के साथ किसी ऑब्जेक्ट को इंस्टेंट करना चलो सी 2 = नया MyClass (42) चलो c3 = नया MyClass (स्ट्रिंग) c4 = MyClass () // नया कीवर्ड वैकल्पिक है </वाक्यविन्यास हाइलाइट>
जावा
जावा (प्रोग्रामिंग लैंग्वेज) में, कंस्ट्रक्टर अन्य तरीकों से भिन्न होते हैं:
- कंस्ट्रक्टर्स के पास कभी भी स्पष्ट रिटर्न प्रकार नहीं होता है।
- कंस्ट्रक्टर्स को सीधे नहीं बुलाया जा सकता (कीवर्ड "
new
” उन्हें आमंत्रित करता है)। - कंस्ट्रक्टर्स के पास नॉन-एक्सेस मॉडिफायर्स नहीं होने चाहिए।
जावा कंस्ट्रक्टर निम्नलिखित क्रम में निम्नलिखित कार्य करते हैं:
- यदि कोई कंस्ट्रक्टर परिभाषित नहीं है, तो सुपरक्लास के डिफॉल्ट कंस्ट्रक्टर को कॉल करें।
- निर्दिष्ट मानों के लिए सदस्य चर प्रारंभ करें।
- कंस्ट्रक्टर के शरीर को निष्पादित करें।
जावा उपयोगकर्ताओं को एक कन्स्ट्रक्टर को दूसरे कन्स्ट्रक्टर में कॉल करने की अनुमति देता है this()
कीवर्ड।
लेकिन this()
पहला कथन होना चाहिए। [9]
<वाक्यविन्यास प्रकाश लैंग = जावा>
वर्ग उदाहरण
{
उदाहरण () // गैर-पैरामीटरयुक्त कंस्ट्रक्टर { यह (1); // कंस्ट्रक्टर की कॉलिंग System.out.println (0-तर्क-विपक्ष); } उदाहरण (इंट ए) // पैरामीटरेटेड कंस्ट्रक्टर { System.out.println (1-तर्क-विपक्ष); }
} सार्वजनिक स्थैतिक शून्य main (String [] args) {
उदाहरण ई = नया उदाहरण ();
} </वाक्यविन्यास हाइलाइट>
जावा सुपरक्लास (कंप्यूटर साइंस) | सुपरक्लास के कंस्ट्रक्टर के माध्यम से एक्सेस प्रदान करता है super
कीवर्ड।
<वाक्यविन्यास प्रकाश लैंग = जावा> सार्वजनिक वर्ग उदाहरण {
// कंस्ट्रक्टर की परिभाषा। सार्वजनिक उदाहरण () { यह (1); }
// कंस्ट्रक्टर को ओवरलोड करना सार्वजनिक उदाहरण (इंट इनपुट) { डेटा = इनपुट; // यह एक असाइनमेंट है }
// उदाहरण चर (ओं) की घोषणा। निजी इंट डेटा;
} </वाक्यविन्यास हाइलाइट>
<वाक्यविन्यास प्रकाश लैंग = जावा> // कोड कहीं और // उपरोक्त कंस्ट्रक्टर के साथ किसी वस्तु को इंस्टेंट करना उदाहरण ई = नया उदाहरण (42); </वाक्यविन्यास हाइलाइट>
शून्य संख्या में तर्क लेने वाले कंस्ट्रक्टर को नो-आर्गुमेंट या नो-आर्ग कंस्ट्रक्टर कहा जाता है।[10]
जावास्क्रिप्ट
ES6 के रूप में, जावास्क्रिप्ट में कई अन्य प्रोग्रामिंग भाषाओं की तरह प्रत्यक्ष रचनाकार हैं। वे इस तरह लिखे गए हैं
<वाक्यविन्यास लैंग = जावास्क्रिप्ट> कक्षा फूबार {
निर्माता (बाज़) { यह.बाज़ = बाज़ }
} </वाक्यविन्यास हाइलाइट>
इसे इस तरह तत्काल किया जा सकता है
<वाक्यविन्यास लैंग = जावास्क्रिप्ट> कॉन्स्ट फू = नया फूबार ('7') </वाक्यविन्यास हाइलाइट>
ES6 से पहले इसके समतुल्य, एक ऐसा फंक्शन बना रहा था जो किसी वस्तु को इस तरह से इंस्टेंट करता है
<वाक्यविन्यास लैंग = जावास्क्रिप्ट> समारोह FooBar (बाज़) {
यह.बाज़ = बाज़;
} </वाक्यविन्यास हाइलाइट>
इसे ऊपर की तरह ही इंस्टेंट किया जाता है।
ऑब्जेक्ट पास्कल
ऑब्जेक्ट पास्कल में, कंस्ट्रक्टर फ़ैक्टरी विधि के समान है। नियमित तरीकों के लिए केवल वाक्यगत अंतर कीवर्ड है constructor
नाम के सामने (के बजाय procedure
या function
). इसका कोई भी नाम हो सकता है, हालाँकि सम्मेलन होना है Create
उपसर्ग के रूप में, जैसे में CreateWithFormatting
. एक वर्ग का एक उदाहरण बनाना एक वर्ग की स्थिर विधि को कॉल करने जैसा काम करता है: TPerson.Create('Peter')
.
<वाक्यविन्यास लैंग = डेल्फी> कार्यक्रम ऊपप्रोग्राम;
प्रकार
टीपर्सन = क्लास निजी FName: स्ट्रिंग; जनता संपत्ति का नाम: स्ट्रिंग FName पढ़ें; निर्माता बनाएँ (नाम: स्ट्रिंग); अंत;
निर्माता TPerson.Create (AName: string); शुरू
एफनाम: = एनाम;
अंत;
वर
व्यक्ति: टीपीसन;
शुरू
व्यक्ति := TPerson.Create('पीटर'); // TPerson का एक उदाहरण आवंटित करता है और फिर TPerson.Create को पैरामीटर AName = 'Peter' के साथ कॉल करता है
अंत। </वाक्यविन्यास हाइलाइट>
ओकैमल
OCaml (प्रोग्रामिंग लैंग्वेज) में, एक कंस्ट्रक्टर होता है। Parameters को वर्ग के नाम के ठीक बाद परिभाषित किया गया है। उनका उपयोग आवृत्ति चर को आरंभ करने के लिए किया जा सकता है और पूरे वर्ग में पहुँचा जा सकता है। एक अनाम छिपी हुई विधि कहलाती है initializer
वस्तु के निर्माण के तुरंत बाद एक अभिव्यक्ति का मूल्यांकन करने की अनुमति देता है।
[11]
<वाक्यविन्यास प्रकाश लैंग = ओकैमल>
वर्ग व्यक्ति प्रथम_नाम अंतिम_नाम =
वस्तु वैल पूर्ण_नाम = प्रथम_नाम ^ ^ अंतिम_नाम
प्रारंभकर्ता Print_endline (नमस्कार, मैं ^ पूर्ण_नाम ^ हूं।)
विधि get_last_name = last_name अंत;;
चलो अलोंजो = नया व्यक्ति अलोंजो चर्च इन (*नमस्कार, मैं अलोंजो चर्च हूं।*)
print_endline alonzo#get_last_name (*चर्च*) </वाक्यविन्यास हाइलाइट>
पीएचपी
PHP संस्करण 5 और इसके बाद के संस्करण में, कंस्ट्रक्टर नाम की एक विधि है __construct()
(ध्यान दें कि यह एक डबल अंडरस्कोर है), जो कि कीवर्ड है new
ऑब्जेक्ट बनाने के बाद स्वचालित रूप से कॉल करता है। यह आमतौर पर संपत्ति आरंभीकरण जैसे आरंभीकरण को स्वचालित रूप से करने के लिए उपयोग किया जाता है। कंस्ट्रक्टर तर्कों को भी स्वीकार कर सकते हैं, इस मामले में, जब new
बयान लिखा गया है, आपको पैरामीटर के लिए कन्स्ट्रक्टर तर्क भी भेजने की जरूरत है।[1]
<वाक्यविन्यास लैंग = php> वर्ग व्यक्ति {
निजी स्ट्रिंग $ नाम;
सार्वजनिक कार्य __ निर्माण (स्ट्रिंग $ नाम): शून्य { $ यह-> नाम = $ नाम; }
सार्वजनिक समारोह getName (): स्ट्रिंग { वापसी $ यह-> नाम; }
} </वाक्यविन्यास हाइलाइट>
PHP में, एक वर्ग को केवल अधिकतम एक कन्स्ट्रक्टर विधि घोषित करने की अनुमति है। स्टैटिक मेथड्स, फैक्ट्री क्लासेस या ऑप्शनल कंस्ट्रक्टर आर्ग्युमेंट्स PHP क्लास के ऑब्जेक्ट्स बनाने के कई तरीकों को सुविधाजनक बनाने के कुछ तरीके हैं।
पर्ल 5
पर्ल संस्करण 5 में, डिफ़ॉल्ट रूप से, कंस्ट्रक्टर फ़ैक्टरी विधियाँ हैं, अर्थात्, वे विधियाँ जो ऑब्जेक्ट बनाती हैं और वापस करती हैं, जिसका अर्थ है एक धन्य संदर्भ बनाना और वापस करना। एक विशिष्ट वस्तु एक हैश का संदर्भ है, हालांकि शायद ही कभी अन्य प्रकार के संदर्भों का भी उपयोग किया जाता है। परंपरा के अनुसार केवल निर्माता को नया नाम दिया गया है, हालांकि इसे अन्यथा नाम देने की अनुमति है, या कई निर्माता हैं। उदाहरण के लिए, एक व्यक्ति वर्ग में नया नाम का एक कन्स्ट्रक्टर हो सकता है और साथ ही एक कन्स्ट्रक्टर new_from_file जो व्यक्ति विशेषताओं के लिए एक फ़ाइल पढ़ता है, और new_from_person जो टेम्पलेट के रूप में किसी अन्य व्यक्ति ऑब्जेक्ट का उपयोग करता है।
<वाक्यविन्यास प्रकाश लैंग = पर्ल> पैकेज व्यक्ति;
- पर्ल में कंस्ट्रक्टर्स को कन्वेंशन द्वारा 'नया' नाम दिया जाता है।
उप नया {
# वर्ग का नाम निहित रूप से 0वें तर्क के रूप में पारित किया गया है। मेरी $ क्लास = शिफ्ट;
# डिफ़ॉल्ट विशेषता मान, यदि आपके पास कोई है। मेरा% डिफ़ॉल्ट = (फू => बार);
# पारित किए गए डिफ़ॉल्ट मानों और तर्कों के संयोजन के रूप में विशेषताओं को प्रारंभ करें। मेरा $ स्वयं = {% डिफ़ॉल्ट, @_};
# आवश्यक तर्कों, वर्ग अपरिवर्तनीय आदि की जाँच करें। अगर ( परिभाषित नहीं $self->{first_name} ) { व्यक्ति-> नया () में अनिवार्य विशेषता गायब हो जाती है: first_name; } अगर ( परिभाषित नहीं $self->{last_name} ) { व्यक्ति-> नया () में अनिवार्य विशेषता गायब हो जाती है: last_name; } अगर ( परिभाषित $self->{आयु} और $self->{आयु} <18) { व्यक्ति में अमान्य विशेषता मान-> नया (): आयु <18; }
# पर्ल किसी वस्तु को 'आशीर्वाद' द्वारा एक वर्ग से संबंधित बनाता है। $ स्वयं को आशीर्वाद दें, $ वर्ग; $ स्वयं लौटें;
} 1; </वाक्यविन्यास हाइलाइट>
मूस के साथ पर्ल 5
पर्ल के लिए मूस पर्ल के साथ, इस बॉयलरप्लेट में से अधिकांश को छोड़ा जा सकता है, एक डिफ़ॉल्ट नया बनाया जाता है, विशेषताओं को निर्दिष्ट किया जा सकता है, साथ ही साथ उन्हें सेट किया जा सकता है, रीसेट किया जा सकता है या आवश्यक है। इसके अलावा, किसी भी अतिरिक्त कंस्ट्रक्टर कार्यक्षमता को BUILD विधि में शामिल किया जा सकता है, जिसे मूस जनरेटेड कंस्ट्रक्टर तर्कों की जाँच करने के बाद कॉल करेगा। एक BUILDARGS विधि को कन्स्ट्रक्टर तर्कों को संभालने के लिए निर्दिष्ट किया जा सकता है जो हैशफ/कुंजी => मान फॉर्म में नहीं है।
<वाक्यविन्यास प्रकाश लैंग = पर्ल> पैकेज व्यक्ति;
- मूस-शैली वस्तु निर्माण को सक्षम करें
मूस का प्रयोग करें;
- पहला नाम (एक स्ट्रिंग) केवल निर्माण के समय सेट किया जा सकता है ('आरओ')
has first_name => (is => 'ro', isa => 'Str',आवश्यक => 1);
- अंतिम नाम (एक स्ट्रिंग) केवल निर्माण के समय सेट किया जा सकता है ('आरओ')
has last_name => (is => 'ro', isa => 'Str', needed => 1);
- आयु (पूर्णांक) को निर्माण ('rw') के बाद संशोधित किया जा सकता है, और इसकी आवश्यकता नहीं है
- कंस्ट्रक्टर बनने के लिए पास होना है। एक 'has_age' विधि भी बनाता है जो वापस आती है
- सच है अगर उम्र निर्धारित की गई है
उम्र है => (is => 'rw', isa => 'Int', विधेय => 'has_age');
- कस्टम आवश्यकताओं की जाँच करें
उप निर्माण {
मेरा $ स्व = शिफ्ट; if ($self->has_age && $self->आयु <18) { # 18 वर्ष से कम नहीं डाई नो अंडर-18 पर्सन; }
} 1; </वाक्यविन्यास हाइलाइट>
दोनों ही मामलों में व्यक्ति वर्ग इस तरह शुरू होता है: <वाक्यविन्यास प्रकाश लैंग = पर्ल> व्यक्ति का उपयोग करें; मेरा $ पी = व्यक्ति-> नया (पहला_नाम => 'सैम', अंतिम_नाम => 'ऐश', उम्र => 42); </वाक्यविन्यास हाइलाइट>
पायथन
पायथन (प्रोग्रामिंग लैंग्वेज) में, कंस्ट्रक्टर्स को एक या दोनों द्वारा परिभाषित किया जाता है __new__
और __init__
तरीके। क्लास को कॉल करके एक नया उदाहरण बनाया जाता है जैसे कि यह एक फ़ंक्शन था, जो कॉल करता है __new__
और __init__
तरीके। यदि कक्षा में एक कन्स्ट्रक्टर विधि परिभाषित नहीं की गई है, तो कक्षा के सी 3 रैखिकरण में पाए जाने वाले अगले को बुलाया जाएगा।[12]
विशिष्ट मामले में, केवल __init__
विधि को परिभाषित करने की आवश्यकता है। (सबसे आम अपवाद अपरिवर्तनीय वस्तुओं के लिए है।)
<वाक्यविन्यास लैंग = पिकॉन> >>> वर्ग उदाहरण वर्ग: ... def __new__(cls, value): ... प्रिंट (नया उदाहरण बना रहा है...) ... # उदाहरण बनाने के लिए सुपरक्लास कंस्ट्रक्टर को कॉल करें। ... उदाहरण = सुपर (उदाहरण क्लास, cls).__new__(cls) ... वापसी का उदाहरण ... def __init__(self, value): ... प्रिंट (प्रारंभिक उदाहरण... ) ... स्व.पेलोड = मूल्य >>> उदाहरण इंस्टेंस = उदाहरण क्लास (42) नया उदाहरण बनाया जा रहा है... इंस्टेंस प्रारंभ किया जा रहा है... >>> प्रिंट (exampleInstance.payload) 42 </वाक्यविन्यास हाइलाइट>
कक्षाएं सामान्य रूप से स्वयं के नए उदाहरणों के लिए फ़ैक्टरी (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के रूप में कार्य करती हैं, अर्थात, एक क्लास एक कॉल करने योग्य ऑब्जेक्ट (एक फ़ंक्शन की तरह) है, जिसमें कॉल कंस्ट्रक्टर है, और क्लास को कॉल करना उस क्लास का एक उदाहरण देता है। हालांकि __new__
विधि को विशेष उद्देश्यों के लिए कक्षा के उदाहरण के अलावा कुछ और वापस करने की अनुमति है। उस मामले में, __init__
आह्वान नहीं किया जाता है।[13]
राकू
राकू (प्रोग्रामिंग भाषा) के साथ, और भी बॉयलरप्लेट को छोड़ा जा सकता है, यह देखते हुए कि एक डिफ़ॉल्ट नई विधि विरासत में मिली है, विशेषताओं को निर्दिष्ट किया जा सकता है, साथ ही साथ उन्हें सेट किया जा सकता है, रीसेट किया जा सकता है या आवश्यक है। इसके अतिरिक्त, किसी भी अतिरिक्त कन्स्ट्रक्टर कार्यक्षमता को BUILD विधि में शामिल किया जा सकता है जिसे कस्टम प्रारंभिकरण की अनुमति देने के लिए बुलाया जाएगा। पहले से ही (अंतर्निहित) प्रारंभ की गई किसी भी विशेषता को पोस्ट-प्रोसेस करने के लिए एक TWEAK विधि निर्दिष्ट की जा सकती है।
<वाक्यविन्यास प्रकाश लैंग = perl6> वर्ग व्यक्ति {
है Str $.first-name आवश्यक है; # पहला नाम (एक स्ट्रिंग) केवल पर सेट किया जा सकता है # निर्माण समय (. का अर्थ है सार्वजनिक)। है Str $.last-name आवश्यक है; # अंतिम नाम (एक स्ट्रिंग) केवल पर सेट किया जा सकता है # निर्माण समय (ए ! का मतलब निजी होगा)। है int $.आयु rw है; # आयु (एक पूर्णांक) के बाद संशोधित किया जा सकता है # निर्माण ('आरडब्ल्यू'), और इसकी आवश्यकता नहीं है # ऑब्जेक्ट इन्स्टेन्शियशन के दौरान। # एक 'पूर्ण-नाम' विधि बनाएँ जो व्यक्ति का पूरा नाम लौटाती है। # इस विधि को कक्षा के बाहर पहुँचा जा सकता है। विधि का पूरा नाम { $!first-name.tc ~ ~ $!last-name.tc }
# एक 'है-एज' मेथड बनाएं, जो उम्र सेट होने पर ट्रू रिटर्न करता है। # इस पद्धति का उपयोग केवल कक्षा के अंदर किया जाता है इसलिए इसे निजी घोषित किया जाता है # इसके नाम के आगे एक ! विधि !है-उम्र {self.age.defined} # कस्टम आवश्यकताओं की जाँच करें विधि ट्वीक { अगर स्वयं!है-उम्र && $!उम्र <18 { # 18 से कम नहीं 18 वर्ष से कम आयु का कोई व्यक्ति नहीं मरता; } }
} </वाक्यविन्यास हाइलाइट>
व्यक्ति वर्ग इस तरह तत्काल होता है: <वाक्यविन्यास प्रकाश लैंग = perl6> मेरा $p0 = व्यक्ति.नया (पहला-नाम => 'सैम', अंतिम-नाम => 'ऐश', उम्र => 42); मेरा $p1 = व्यक्ति.नया (प्रथम-नाम => 'अनुग्रह', अंतिम-नाम => 'कूदनेवाला'); कहना $p1.full-name(); # आउटपुट: «ग्रेस हूपर» </वाक्यविन्यास हाइलाइट>
वैकल्पिक रूप से, नामित पैरामीटर पर्ल 6 में कोलन-जोड़ी सिंटैक्स का उपयोग करके निर्दिष्ट किए जा सकते हैं: <वाक्यविन्यास प्रकाश लैंग = perl6> my $p0 = person.new( :first-name<Sam>, :last-name<Ashe>, :age(42) ); my $p1 = person.new( :first-name<Grace>, :last-name<Hopper> ); </वाक्यविन्यास हाइलाइट>
और क्या आपको नामित पैरामीटर के समान नामों के साथ चर सेट अप करना चाहिए, आप शॉर्टकट का उपयोग कर सकते हैं जो नामित पैरामीटर के लिए चर के 'नाम' का उपयोग करेगा: <वाक्यविन्यास प्रकाश लैंग = perl6> मेरा $ पहला-नाम = सैम; मेरा $ अंतिम-नाम = ऐश; मेरी उम्र = 42; my $p0 = person.new( :$first-name, :$last-name, :$age ); </वाक्यविन्यास हाइलाइट>
रूबी
रूबी (प्रोग्रामिंग भाषा) में, कंस्ट्रक्टर्स नामक एक विधि को परिभाषित करके बनाया जाता है initialize
. प्रत्येक नए उदाहरण को आरंभ करने के लिए इस विधि को निष्पादित किया जाता है।
<वाक्यविन्यास प्रकाश लैंग = आरबीकॉन>
irb(main):001:0> क्लास exampleClass
irb(main):002:1> डीईएफ़ इनिशियलाइज़ करें
irb(main):003:2> वहां हैलो डालता है
आईआरबी (मुख्य): 004: 2> अंत
आईआरबी (मुख्य): 005: 1> अंत
=> शून्य
आईआरबी (मुख्य): 006: 0> उदाहरण क्लास.न्यू
नमस्ते
=> #<ExampleClass:0x007fb3f4299118>
</वाक्यविन्यास हाइलाइट>
विजुअल बेसिक .NET
Visual Basic .NET में, निर्माता नाम के साथ विधि घोषणा का उपयोग करते हैंNew
.
<वाक्यविन्यास लैंग = vbnet> वर्ग फूबर
निजी strData स्ट्रिंग के रूप में
'निर्माता सार्वजनिक उप नया (ByVal someParam As String) strData = someParam अंत उप
अंत वर्ग </वाक्यविन्यास हाइलाइट>
<वाक्यविन्यास लैंग = vbnet> 'कोड कहीं और ' उपरोक्त कन्स्ट्रक्टर के साथ किसी ऑब्जेक्ट को तुरंत चालू करना न्यू फूबार के रूप में डिम फू (.NET) </वाक्यविन्यास हाइलाइट>
यह भी देखें
- संसाधन_अधिग्रहण_प्रारंभिकीकरण है
- आवंटन स्थल
- रचनात्मक पैटर्न
- विध्वंसक (कंप्यूटर विज्ञान)
- C++ में ग्लोबल ((निर्माता)), और इसका C समकक्ष, ((कंस्ट्रक्टर)) फ़ंक्शन विशेषता
टिप्पणियाँ
- ↑ Eiffel routines are either procedures or functions. Procedures never have a return type. Functions always have a return type.
- ↑ Because the inherited class invariant must be satisfied, there is no mandatory call to the parents' constructors.
- ↑ The Eiffel standard requires fields to be initialized on first access, so it is not necessary to perform default field initialization during object creation.
संदर्भ
- ↑ 1.0 1.1 1.2 Constructors and Destructors, from PHP online documentation
- ↑ Data model, from Python online documentation
- ↑ https://stackoverflow.com/questions/1242830/constructor-initialization-list-evaluation-order Constructor
- ↑ "Fabulous Adventures in Coding". Eric Lippert. 2013-02-06. Retrieved 2014-04-05.
- ↑ Expert .NET 2.0 IL Assembler. APress. 2006-01-01. ISBN 9781430202233. Retrieved 2014-04-05.
- ↑ Static Constructor in C# on MSDN
- ↑ CFComponent
- ↑ Eiffel ISO/ECMA specification document
- ↑ Details on Constructor in java
- ↑ "Providing Constructors for Your Classes". Oracle Corporation. 2013. Retrieved 2013-12-20.
- ↑ OCaml manual
- ↑ Data model
- ↑ Data model