स्कॉट मेयर्स के प्रभावी सी ++ के पृष्ठ 6 पर, 'कॉपी कन्स्ट्रक्टर' शब्द परिभाषित किया गया है। मैं अपने संदर्भ के रूप में Schiltdt की पुस्तक का उपयोग कर रहा हूं और मुझे कॉपी कन्स्ट्रक्टर का कोई उल्लेख नहीं मिल रहा है। मुझे विचार मिलता है लेकिन क्या यह सी ++ का मानक हिस्सा है? क्या इस तरह के रचनाकारों को कॉल के आधार पर कक्षा उत्तीर्ण की जाएगी?सी ++ में एक कॉपी कन्स्ट्रक्टर क्या है?
उत्तर
एक प्रति निर्माता निम्नलिखित रूप है।
void foo(example x);
int main(void)
{
example x1; //normal ctor
example x2 = x1; // copy ctor
example x3(x2); // copy ctor
foo(x1); // calls the copy ctor to copy the argument for foo
}
केवल तभी 'foo' में प्रोटोटाइप' शून्य foo (उदाहरण x) है; '। उदाहरण के लिए, 'शून्य foo (कॉन्स उदाहरण & x);' किसी भी निर्माता को कॉल नहीं करेगा। या 'शून्य foo (int x);' जो एक कंपाइलर त्रुटि नहीं है, तो एक कास्ट ऑपरेटर 'ऑपरेटर int() 'को कॉल कर सकता है। – kennytm
मेरे पास है – DerKuchen
-1 "एक प्रतिलिपि बनाने वाले के पास निम्न प्रपत्र है:" गलत है। कॉपी कन्स्ट्रक्टर के चार संभावित रूप हैं। इसके अलावा कक्षा का उदाहरण वाक्य रचनात्मक रूप से अमान्य है –
हां, कॉपी कन्स्ट्रक्टर निश्चित रूप से मानक सी ++ का एक अनिवार्य हिस्सा हैं। उनके बारे में और पढ़ें (और अन्य रचनाकार) here (सी ++ एफएक्यू)।
यदि आपके पास सी ++ पुस्तक है जो प्रतिलिपि बनाने वालों के बारे में नहीं सिखाती है, तो इसे फेंक दें। यह एक बुरी किताब है।
विकिपीडिया पर Copy constructor देखें।
class Foo {
public:
Foo(); // default constructor
Foo(const Foo& foo); // copy constructor
// ...
};
एक उदाहरण foo
को देखते हुए,
Foo bar(foo);
या
Foo bar = foo;
साथ प्रतिलिपि निर्माता आह्वान:
मूल विचार प्रतिलिपि कंस्ट्रक्टर्स मौजूदा कॉपी करके नई उदाहरणों का दृष्टांत है मानक टेम्पलेट लाइब्रेरी के कंटेनरों को ऑब्जेक्ट टी की आवश्यकता होती है o प्रतिलिपि योग्य और असाइन करने योग्य हो, इसलिए यदि आप std::vector<YourClass>
का उपयोग करना चाहते हैं, तो सुनिश्चित करें कि एक उचित प्रतिलिपि निर्माता और operator=
परिभाषित करें यदि संकलक-जेनरेट किए गए डिफ़ॉल्ट समझ में नहीं आते हैं।
class example
{
example(const example&)
{
// this is the copy constructor
}
}
निम्न उदाहरण से पता चलता है, जहां यह कहा जाता है:
एली द्वारा पोस्ट किया गया सी ++ एफएक्यू लिंक अच्छा है और gbacon की पोस्ट सही है।
स्पष्ट रूप से अपने प्रश्न के दूसरे भाग का उत्तर देने के लिए: हाँ, जब आप किसी ऑब्जेक्ट आवृत्ति को मूल्य से पास करते हैं तो कॉपी कन्स्ट्रक्टर का उपयोग फ़ंक्शन कॉल के दायरे में ऑब्जेक्ट का स्थानीय उदाहरण बनाने के लिए किया जाएगा। प्रत्येक ऑब्जेक्ट में "डिफॉल्ट कॉपी कन्स्ट्रक्टर" होता है (gbacon इसे "कंपाइलर जेनरेट डिफॉल्ट" के रूप में इंगित करता है) जो कि प्रत्येक ऑब्जेक्ट सदस्य की प्रतिलिपि बनाता है - उदाहरण के लिए, यदि आपके ऑब्जेक्ट इंस्टेंस में पॉइंटर्स या संदर्भ हैं, तो यह वही नहीं हो सकता है।
सी ++ सीखने के लिए अच्छी किताबों के बारे में - मैंने पहली बार इसे लगभग दो दशकों पहले सीखा और इसके बाद से यह एक अच्छा सौदा बदल गया है - मैं ब्रूस एकल के "सोचने वाले सी ++" संस्करण 1 और 2 की सिफारिश करता हूं, यहां मुफ्त में उपलब्ध है (PDF और एचटीएमएल फार्म) में:
कॉपी निर्माता तो निम्न परिदृश्यों में बुलाया जाएगा:
जब किसी मौजूदा ऑब्जेक्ट से नई वस्तुओं का निर्माण।
MyClass Obj1; MyClass Obj2 = Obj1; // Here assigning Obj1 to newly created Obj2
या
MyClass Obj1; MyClass Obj2(Obj1);
जब मूल्य द्वारा वर्ग वस्तु गुजर।
void NewClass::TestFunction(MyClass inputObject_i) { // Function body }
मूल्य से पारित MyClass ऑब्जेक्ट के ऊपर। तो MyClass के कन्स्ट्रक्टर की प्रतिलिपि कॉल करेंगे। कॉपी कन्स्ट्रक्टर कॉलिंग से बचने के संदर्भ में पास करें।
जब मूल्य द्वारा वस्तुओं लौटने
MyClass NewClass::Get() { return ObjMyClass; }
MyClass से ऊपर कीमत की दृष्टि से लौटे, तो कॉपी MyClass के निर्माता कॉल करेंगे है। कॉपी कन्स्ट्रक्टर कॉलिंग से बचने के संदर्भ में पास करें।
कॉपी कन्स्ट्रक्टर सी ++ का एक अनिवार्य हिस्सा है। भले ही कोई सी ++ कंपाइलर डिफॉल्ट कॉपी कन्स्ट्रक्टर प्रदान करता है, अगर हम कक्षा में स्पष्ट रूप से इसे परिभाषित नहीं करते हैं, तो हम निम्नलिखित दो कारणों से कक्षा के लिए कॉपी कन्स्ट्रक्टर लिखते हैं।
- यदि कक्षा में कोई गतिशील स्मृति आवंटन है।
- यदि हम कक्षा के अंदर सूचक चर का उपयोग करते हैं। (अन्यथा यह में एक उथले प्रति 2 वस्तुओं एक ही स्मृति स्थान को इंगित करेंगे।)
एक गहरी प्रतिलिपि बनाने के लिए, आप एक प्रति निर्माता लिखने और असाइनमेंट ऑपरेटर को ओवरलोड चाहिए, अन्यथा प्रतिलिपि होगा विनाशकारी परिणामों के साथ मूल को इंगित करें।
प्रतिलिपि निर्माता वाक्य रचना नीचे के रूप में लिखा जाएगा:
class Sample{
public:
Sample (const Sample &sample);
};
int main()
{
Sample s1;
Sample s2 = s1; // Will invoke Copy Constructor.
Sample s3(s1); //This will also invoke copy constructor.
return 0;
}
- 1. सी # कॉपी कन्स्ट्रक्टर जनरेटर
- 2. सी # जेनेरिक कॉपी कन्स्ट्रक्टर
- 3. कॉपी कन्स्ट्रक्टर सी ++ में डिफ़ॉल्ट कन्स्ट्रक्टर को क्यों छुपाता है?
- 4. क्या एक टेम्पलेटेड कन्स्ट्रक्टर सी ++ में अंतर्निहित कॉपी कन्स्ट्रक्टर को ओवरराइड करता है?
- 5. कॉपी कन्स्ट्रक्टर
- 6. क्या यह पायथन में एक कॉपी कन्स्ट्रक्टर के बराबर है?
- 7. कन्स्ट्रक्टर या कॉपी कन्स्ट्रक्टर?
- 8. सी ++ क्या कॉपी कन्स्ट्रक्टर यहां बुलाया गया है?
- 9. कॉपी कन्स्ट्रक्टर
- 10. क्या कोई ऑब्जेक्ट कॉपी कन्स्ट्रक्टर
- 11. जावा में एक कॉपी कन्स्ट्रक्टर क्यों नहीं है?
- 12. कॉपी कन्स्ट्रक्टर और डिफॉल्ट कन्स्ट्रक्टर
- 13. सी ++ में एक गैर-तुच्छ कन्स्ट्रक्टर क्या है?
- 14. सी ++: कॉपी कन्स्ट्रक्टर और कॉपी असाइनमेंट ऑपरेटर को कार्यान्वित करना
- 15. सी ++ में एक कॉपी कन्स्ट्रक्टर को प्रतिबंधित करने का सबसे विश्वसनीय तरीका क्या है?
- 16. कॉपी-कन्स्ट्रक्टर विरासत
- 17. मैटलैब कॉपी कन्स्ट्रक्टर
- 18. टेम्पलेट कॉपी कन्स्ट्रक्टर
- 19. बेस कॉपी कन्स्ट्रक्टर को
- 20. टेम्पलेट क्लास कॉपी कन्स्ट्रक्टर
- 21. सी ++ में इन-प्लेस कन्स्ट्रक्टर क्या है?
- 22. कोई कॉपी कन्स्ट्रक्टर उपलब्ध नहीं है या कॉपी कन्स्ट्रक्टर को 'स्पष्ट' घोषित किया गया है
- 23. लिंक्डलिस्ट कॉपी कन्स्ट्रक्टर कार्यान्वयन विवरण
- 24. कॉपी कन्स्ट्रक्टर यहां क्यों नहीं है?
- 25. सी ++ में आवंटक को एक कॉपी कन्स्ट्रक्टर की आवश्यकता क्यों है?
- 26. क्या सी # में एक कन्स्ट्रक्टर को ओवरराइड करना संभव है?
- 27. जावा कॉपी कन्स्ट्रक्टर और विरासत
- 28. कॉपी कन्स्ट्रक्टर और असाइनमेंट ऑपरेटर
- 29. "यह()" एक कन्स्ट्रक्टर में क्या करता है?
- 30. क्या कन्स्ट्रक्टर सी ++ में एक और कन्स्ट्रक्टर कॉल कर सकता है?
ठीक है, कि Schildt की खासियत होगा - पृथ्वी पर क्यों लोग अपनी पुस्तकों में प्रयोग करते हैं? –
कृपया, शीतल की किताबों को नमक के अनाज के बिना न लें। "बुल्सचिल्ड" शब्द के लिए Google और अपने लिए देखें। अधिक गंभीरता से, एसीसीयू पर शिलल्ट की किताबों की समीक्षा पढ़ें; उनमें से ज्यादातर अनुकूल नहीं हैं। –
@Neil: हालांकि मैंने शिलल्ट की किताबों के बारे में भी बुरी बातें सुनी हैं, लेकिन यह विश्वास करना मुश्किल है * यह प्रतिलिपि बनाने वालों के बारे में बात नहीं करता है। –