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

सी ++ में ऑब्जेक्ट कॉपी को रोकना

सी ++ में, जब कक्षाएं बनाई जाती हैं, तो हम इसे कुछ कॉपी कंस्ट्रक्टर या असाइनमेंट ऑपरेटर का उपयोग करके कॉपी कर सकते हैं। इस खंड में हम देखेंगे कि C++ में किसी क्लास की ऑब्जेक्ट कॉपी को कैसे रोका जाए। ऑब्जेक्ट कॉपी को रोकने के लिए हम कुछ नियमों का पालन कर सकते हैं। ये नीचे की तरह हैं।

1. प्राइवेट कॉपी कंस्ट्रक्टर और प्राइवेट असाइनमेंट ऑपरेटर बनाना।

उदाहरण

#include <iostream>
using namespace std;
class MyClass {
   int x;
   public:
      MyClass() {
         //non-parameterized constructor
      }
      MyClass(int y): x(y) {
      }
   private:
      MyClass(const MyClass& obj) : x(obj.x) {
         //private copy constructor
      }
      MyClass& operator=(const MyClass& tmp_obj) {
         //private assignment operator (overloaded)
            x = tmp_obj.x;
         return *this;
      }
   };
 main() {
   MyClass ob(50);
   MyClass ob2(ob); // calls copy constructor
   ob2 = ob; // calls copy assignment operator
}

आउटपुट

[Error] 'MyClass::MyClass(const MyClass&)' is private
[Error] within this context
[Error] 'MyClass& MyClass::operator=(const MyClass&)' is private
[Error] within this context

2. प्राइवेट कॉपी कंस्ट्रक्टर और प्राइवेट असाइनमेंट ऑपरेटर के साथ डमी क्लास इनहेरिट करें।

उदाहरण

#include <iostream>
using namespace std;
class DummyClass {
   public:
      DummyClass() {
      }
   private:
      DummyClass(const DummyClass& temp_obj) {
      }
      DummyClass& operator=(const DummyClass& temp_obj) {
      }
};
class MyClass : public DummyClass {
   int x;
   public:
      MyClass() { }
      MyClass(int y) : x(y) {
      }
};
int main() {
   MyClass ob1(50);
   MyClass ob2(ob1); // Calls copy constructor
   ob2 = ob1; // Calls copy assignment operator
}

आउटपुट

[Error] 'DummyClass::DummyClass(const DummyClass&)' is private
[Error] within this context
In function 'int main()':
[Note] synthesized method 'MyClass::MyClass(const MyClass&)' first
required here
In member function 'MyClass& MyClass::operator=(const MyClass&)':
[Error] 'DummyClass& DummyClass::operator=(const DummyClass&)' is
private
[Error] within this context
In function 'int main()':
[Note] synthesized method 'MyClass& MyClass::operator=(const
MyClass&)' first required here

  1. सी ++ में कॉन्स्ट सदस्य कार्य करता है

    कॉन्स सदस्य कार्य वे कार्य हैं जिन्हें कार्यक्रम में स्थिर घोषित किया जाता है। इन कार्यों द्वारा बुलाई गई वस्तु को संशोधित नहीं किया जा सकता है। कॉन्स्टेबल कीवर्ड का उपयोग करने की अनुशंसा की जाती है ताकि ऑब्जेक्ट में आकस्मिक परिवर्तन से बचा जा सके। किसी भी प्रकार के ऑब्जेक्ट द्वारा एक कॉन्स्ट सदस्य

  1. सी ++ प्रोग्राम स्ट्रिंग्स कॉपी करने के लिए

    एक स्ट्रिंग एक आयामी वर्ण सरणी है जिसे एक शून्य वर्ण द्वारा समाप्त किया जाता है। एक स्ट्रिंग के मान को दूसरी स्ट्रिंग में कॉपी किया जा सकता है। यह या तो strcpy() फ़ंक्शन का उपयोग करके किया जा सकता है जो एक मानक लाइब्रेरी फ़ंक्शन है या इसके बिना। strcpy() फ़ंक्शन का उपयोग किए बिना एक स्ट्रिंग को कॉप

  1. सी ++ में पायथन ऑब्जेक्ट का उपयोग कैसे करें?

    यहां एक उदाहरण दिया गया है जिसमें एक साधारण पायथन ऑब्जेक्ट लपेटा और एम्बेड किया गया है। हम इसके लिए .c का उपयोग कर रहे हैं, c++ के समान चरण हैं - class PyClass(object):     def __init__(self):         self.data = []     def add(self, val):