Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में कॉपी कंस्ट्रक्टर कब कहा जाता है?


कॉपी कंस्ट्रक्टर एक कंस्ट्रक्टर है जो एक ऑब्जेक्ट को उसी क्लास के ऑब्जेक्ट से आरंभ करके बनाता है, जिसे पहले बनाया गया हो। कॉपी कंस्ट्रक्टर का उपयोग किया जाता है -

  • एक ऑब्जेक्ट को उसी प्रकार के दूसरे ऑब्जेक्ट से आरंभ करने के लिए।
  • एक ऑब्जेक्ट को कॉपी करके फ़ंक्शन में आर्गुमेंट के रूप में पास करने के लिए।
  • एक ऑब्जेक्ट को कॉपी करके फ़ंक्शन से वापस करने के लिए।

यदि किसी क्लास में कॉपी कंस्ट्रक्टर परिभाषित नहीं है, तो कंपाइलर स्वयं एक परिभाषित करता है। यदि क्लास में पॉइंटर वेरिएबल्स हैं और कुछ डायनामिक मेमोरी आवंटन हैं, तो कॉपी कंस्ट्रक्टर होना आवश्यक है। कॉपी कंस्ट्रक्टर का सबसे सामान्य रूप यहां दिखाया गया है -

classname (const classname &obj) {    // कंस्ट्रक्टर का शरीर }

यहां, obj उस ऑब्जेक्ट का संदर्भ है जिसका उपयोग दूसरे ऑब्जेक्ट को आरंभ करने के लिए किया जा रहा है।

उदाहरण कोड

#include <iostream> using namespace std; class Line {    public:       int getLength( void );       Line( int len ); // सरल कंस्ट्रक्टर       Line( const Line &obj); // कॉपी कंस्ट्रक्टर       ~Line(); // डिस्ट्रक्टर    private:       int *ptr; }; // कंस्ट्रक्टर सहित सदस्य फ़ंक्शन परिभाषाएं Line::Line(int len) {    cout << "Normal constructor allocating ptr" << endl;    // पॉइंटर के लिए मेमोरी आवंटित करें;    ptr = new int;    *ptr = len; } Line::Line(const Line &obj) {    cout << "Copy constructor allocating ptr." << endl;    ptr = new int;    *ptr = *obj.ptr; // मान कॉपी करें } Line::~Line(void) {    cout << "Freeing memory!" << endl;    delete ptr; } int Line::getLength( void ) {    return *ptr; } void display(Line obj) {    cout << "Length of line : " << obj.getLength() <<endl; } // प्रोग्राम के लिए मुख्य फ़ंक्शन int main() {    Line line(10);    display(line);    return 0; }

आउटपुट

Normal constructor allocating ptr Copy constructor allocating ptr. Length of line : 10 Freeing memory! Freeing memory!

आइए उसी उदाहरण को देखें लेकिन एक छोटे बदलाव के साथ मौजूदा ऑब्जेक्ट का उपयोग करके उसी प्रकार का एक और ऑब्जेक्ट बनाने के लिए -

उदाहरण कोड

#include <iostream> using namespace std; class Line {    public:       int getLength( void );       Line( int len ); // सरल कंस्ट्रक्टर       Line( const Line &obj); // कॉपी कंस्ट्रक्टर       ~Line(); // डिस्ट्रक्टर    private:       int *ptr; }; // कंस्ट्रक्टर सहित सदस्य फ़ंक्शन परिभाषाएं Line::Line(int len) {    cout << "Normal constructor allocating ptr" << endl;    // पॉइंटर के लिए मेमोरी आवंटित करें;    ptr = new int;    *ptr = len; } Line::Line(const Line &obj) {    cout << "Copy constructor allocating ptr." << endl;    ptr = new int;    *ptr = *obj.ptr; // मान कॉपी करें } Line::~Line(void) {    cout << "Freeing memory!" << endl;    delete ptr; } int Line::getLength( void ) {    return *ptr; } void display(Line obj) {    cout << "Length of line : " << obj.getLength() <<endl; } // प्रोग्राम के लिए मुख्य फ़ंक्शन    int main() {    Line line1(10);    Line line2 = line1; // यह भी कॉपी कंस्ट्रक्टर को कॉल करता है    display(line1);    display(line2);    return 0; }

आउटपुट

Normal constructor allocating ptr Copy constructor allocating ptr. Copy constructor allocating ptr. Length of line : 10 Freeing memory! Copy constructor allocating ptr. Length of line : 10 Freeing memory! Freeing memory! Freeing memory!

  1. - C++ में मिड-पॉइंट लाइन जनरेशन एल्गोरिदम

    एक रेखा दो बिंदुओं को जोड़ती है। यह ग्राफिक्स में एक मूल तत्व है। एक रेखा खींचने के लिए, आपको दो बिंदुओं की आवश्यकता होती है जिनके बीच आप स्क्रीन पर एक रेखा खींच सकते हैं और ग्राफिक्स के संदर्भ में हम बिंदुओं को पिक्सेल के रूप में संदर्भित करते हैं और प्रत्येक पिक्सेल पूर्णांक निर्देशांक से जुड़ा हो

  1. - C++ में कॉपी कंस्ट्रक्टर और असाइनमेंट ऑपरेटर में अंतर

    इस पोस्ट में, हम C++ में कॉपी कंस्ट्रक्टर और असाइनमेंट ऑपरेटर के बीच अंतर को समझेंगे।कॉपी कंस्ट्रक्टरयह एक ओवरलोडेड कंस्ट्रक्टर है।यह नए ऑब्जेक्ट को पहले से मौजूद ऑब्जेक्ट के डेटा/मान से इनिशियलाइज़ करता है।इसका उपयोग तब किया जाता है जब किसी मौजूदा ऑब्जेक्ट की मदद से एक नया ऑब्जेक्ट बनाया जाता है।ये

  1. C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें C++ में लाइन रिफ्लेक्शन - Y-अक्ष के समानांतर सममित रेखा जांचें

    समस्या विवरण मान लीजिए हमारे पास 2D तल पर n बिंदु हैं, हमें जांचना है कि क्या y-अक्ष के समानांतर कोई रेखा है जो दिए गए बिंदुओं को सममित रूप से प्रतिबिंबित करती है, दूसरे शब्दों में, जांचें कि क्या कोई ऐसी रेखा मौजूद है जो सभी बिंदुओं को दी गई रेखा पर प्रतिबिंबित करने के बाद मूल बिंदुओं का समुच्चय प