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

C++ में कॉपी कंस्ट्रक्टर्स को कैसे लागू करें?

यहां हम देखेंगे कि C++ में कॉपी कंस्ट्रक्टर्स को कैसे लागू किया जाता है। इस पर चर्चा करने से पहले हमें पता होना चाहिए कि कॉपी कंस्ट्रक्टर क्या है।

कॉपी कंस्ट्रक्टर एक कंस्ट्रक्टर है जो किसी ऑब्जेक्ट को उसी क्लास के ऑब्जेक्ट के साथ इनिशियलाइज़ करके बनाता है, जिसे पहले बनाया गया था। कॉपी कंस्ट्रक्टर का उपयोग −

. के लिए किया जाता है
  • एक ही प्रकार के दूसरे ऑब्जेक्ट से इनिशियलाइज़ करें।
  • किसी ऑब्जेक्ट को किसी फ़ंक्शन के तर्क के रूप में पास करने के लिए उसकी प्रतिलिपि बनाएँ।
  • किसी ऑब्जेक्ट को किसी फ़ंक्शन से वापस करने के लिए उसकी प्रतिलिपि बनाएँ।

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

classname (const classname &obj) {
// body of constructor
}

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

उदाहरण

#include <iostream>
using namespace std;
class Line {
   public:
      int getLength( void );
      Line( int len ); // simple constructor
      Line( const Line &obj); // copy constructor
      ~Line(); // destructor
   private:
      int *ptr;
};
// Member functions definitions including constructor
Line::Line(int len) {
   cout << "Normal constructor allocating ptr" << endl;
   // allocate memory for the pointer;
   ptr = new int;
   *ptr = len;
}
Line::Line(const Line &obj) {
   cout << "Copy constructor allocating ptr." << endl;
   ptr = new int;
   *ptr = *obj.ptr; // copy the value
}
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;
}
// Main function for the program
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 ); // simple constructor
      Line( const Line &obj); // copy constructor
      ~Line(); // destructor
   private:
      int *ptr;
};
// Member functions definitions including constructor
Line::Line(int len) {
   cout << "Normal constructor allocating ptr" << endl;
   // allocate memory for the pointer;
   ptr = new int;
   *ptr = len;
}
Line::Line(const Line &obj) {
   cout << "Copy constructor allocating ptr." << endl;
   ptr = new int;
   *ptr = *obj.ptr; // copy the value
}
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;
}
// Main function for the program
int main() {
   Line line1(10);
   Line line2 = line1; // This also calls copy constructor
   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++ में कॉपी कंस्ट्रक्टर और असाइनमेंट ऑपरेटर के बीच अंतर

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

  1. C++ का उपयोग करके OpenCV में एक रेखा कैसे खींचना है?

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

  1. C++ . में रेखा परावर्तन

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