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

C++ में कॉपी कंस्ट्रक्टर


कॉपी कंस्ट्रक्टर क्या है?

एक प्रकार का कंस्ट्रक्टर जो समान क्लास के मौजूदा ऑब्जेक्ट से नया ऑब्जेक्ट बनाता और आरंभ करता है। यदि परिभाषित न हो तो कंपाइलर डिफॉल्ट कॉपी कंस्ट्रक्टर बनाता है (शैलो कॉपी)। पॉइंटर सदस्यों या डायनामिक मेमोरी वाली क्लास के लिए डीप कॉपी कंस्ट्रक्टर आवश्यक है।

सिंटैक्स

ClassName(const ClassName &obj)

C++ प्रोग्राम उदाहरण

#include <iostream>
using namespace std;

class Demo {
private:
    int num1, num2;
public:
    Demo(int n1, int n2) {          // पैरामीट्रिक कंस्ट्रक्टर
        num1 = n1;
        num2 = n2;
    }
    Demo(const Demo &n) {           // कॉपी कंस्ट्रक्टर
        num1 = n.num1;
        num2 = n.num2;
    }
    void display() {
        cout << "num1 = " << num1 << endl;
        cout << "num2 = " << num2 << endl;
    }
};

int main() {
    Demo obj1(10, 20);      // पैरामीट्रिक कंस्ट्रक्टर
    Demo obj2 = obj1;       // कॉपी कंस्ट्रक्टर कॉल होता है
    obj1.display();
    obj2.display();
    return 0;
}

आउटपुट

num1 = 10
num2 = 20
num1 = 10
num2 = 20

कोड व्याख्या

Demo क्लास

पैरामीट्रिक कंस्ट्रक्टर और कॉपी कंस्ट्रक्टर दोनों परिभाषित हैं। कॉपी कंस्ट्रक्टर स्रोत ऑब्जेक्ट के सदस्यों को नए ऑब्जेक्ट में कॉपी करता है।

मुख्य फ़ंक्शन

obj1 पैरामीट्रिक कंस्ट्रक्टर से बनता है। obj2 = obj1 कॉपी कंस्ट्रक्टर को आमंत्रित करता है (कॉपी इनिशियलाइजेशन)। दोनों ऑब्जेक्ट्स के मान प्रदर्शित किए जाते हैं।

शैलो कॉपी बनाम डीप कॉपी

पहलूशैलो कॉपी (डिफॉल्ट)डीप कॉपी (उपयोगकर्ता-परिभाषित)
पॉइंटर सदस्यपता कॉपी करता हैनई मेमोरी आवंटित करके मान कॉपी करता है
समस्याडबल फ्री, डेंगलिंग पॉइंटरस्वतंत्र ऑब्जेक्ट्स
आवश्यकतासरल डेटा प्रकारों के लिए ठीकपॉइंटर/डायनामिक मेमोरी के लिए आवश्यक

कॉपी एलाइडिंग (C++17)

आधुनिक C++ में कॉपी कंस्ट्रक्टर कॉल को अनुकूलित करके हटाया जा सकता है (RVO - Return Value Optimization)।

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

    कॉपी कंस्ट्रक्टर और असाइनमेंट ऑपरेटर्स का उपयोग एक ऑब्जेक्ट को दूसरे ऑब्जेक्ट में आरंभ करने के लिए किया जाता है। उनके बीच मुख्य अंतर यह है कि कॉपी कंस्ट्रक्टर नए ऑब्जेक्ट के लिए एक अलग मेमोरी ब्लॉक बनाता है। लेकिन असाइनमेंट ऑपरेटर नया मेमोरी स्पेस नहीं बनाता। यह पिछले मेमोरी ब्लॉक को इंगित करने के

  1. - C++ में डिस्ट्रक्टर (Destructors)

    डिस्ट्रक्टर क्या है? डिस्ट्रक्टर क्लास का सदस्य फ़ंक्शन है जो ऑब्जेक्ट को नष्ट करता है। जब ऑब्जेक्ट स्कोप से बाहर जाता है (फ़ंक्शन समाप्त, प्रोग्राम समाप्त, delete कॉल) तो स्वचालित रूप से कॉल होता है। विशेषताएं कोई पैरामीटर नहीं लेता कोई रिटर्न मान नहीं नाम: क्लास का नाम जिस पर टिल्ड (~) लगा हो ए

  1. - C++ में कंस्ट्रक्टर्स (Constructors)

    कंस्ट्रक्टर क्या हैं? क्लास के विशेष सदस्य फ़ंक्शन जो ऑब्जेक्ट बनने पर स्वचालित रूप से चलते हैं। क्लास के समान नाम, कोई रिटर्न टाइप नहीं। सदस्यों को प्रारंभिक मान देने के लिए प्राथमिक उपयोग। कंस्ट्रक्टर के दो मुख्य प्रकार 1. डिफॉल्ट कंस्ट्रक्टर कोई पैरामीटर नहीं लेता। यदि स्पष्ट रूप से परिभाषित न