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

C++ में अपना असाइनमेंट ऑपरेटर कब लिखना चाहिए

यहां हम देखेंगे कि C++ में हमें अपना असाइनमेंट ऑपरेटर कब बनाने की आवश्यकता होती है। यदि किसी क्लास में कोई पॉइंटर नहीं है, तो हमें असाइनमेंट ऑपरेटर और कॉपी कंस्ट्रक्टर बनाने की आवश्यकता नहीं है। C++ कंपाइलर प्रत्येक क्लास के लिए कॉपी कंस्ट्रक्टर और असाइनमेंट ऑपरेटर बनाता है। यदि ऑपरेटर पर्याप्त नहीं हैं, तो हमें अपना असाइनमेंट ऑपरेटर बनाना होगा।

उदाहरण

#include <iostream>
using namespace std;

class MyClass { // कोई यूजर डिफाइंड असाइनमेंट ऑपरेटर या कॉपी कंस्ट्रक्टर मौजूद नहीं है
    int *ptr;
public:
    MyClass(int x = 0) {
        ptr = new int(x);
    }
    void setValue(int x) {
        *ptr = x;
    }
    void print() {
        cout << *ptr << endl;
    }
};

int main() {
    MyClass ob1(50);
    MyClass ob2;
    ob2 = ob1;
    ob1.setValue(100);
    ob2.print();
    return 0;
}

आउटपुट

100

main() फंक्शन में, हमने ob1 के लिए setValue() मेथड का उपयोग करके x का मान सेट किया है। मान ob2 ऑब्जेक्ट में भी परिलक्षित होता है; इस प्रकार के अप्रत्याशित परिवर्तन कुछ समस्याएं उत्पन्न कर सकते हैं। कोई यूजर डिफाइंड असाइनमेंट ऑपरेटर नहीं है, इसलिए कंपाइलर एक बनाता है। यहां यह RHS के ptr को LHS में कॉपी करता है। इसलिए दोनों पॉइंटर्स एक ही स्थान पर इशारा कर रहे हैं।

इस समस्या को हल करने के लिए, हम दो विधियों का पालन कर सकते हैं। या तो हम ऑब्जेक्ट कॉपी को प्रतिबंधित करने के लिए डमी प्राइवेट असाइनमेंट ऑपरेटर बना सकते हैं, अन्यथा अपना असाइनमेंट ऑपरेटर बना सकते हैं।

उदाहरण

#include <iostream>
using namespace std;

class MyClass {
    int *ptr;
public:
    MyClass(int x = 0) {
        ptr = new int(x);
    }
    void setValue(int x) {
        *ptr = x;
    }
    void print() {
        cout << *ptr << endl;
    }
    MyClass &operator=(const MyClass &ob2) {
        // सेल्फ असाइनमेंट की जांच
        if (this != &ob2)
            *ptr = *(ob2.ptr);
        return *this;
    }
};

int main() {
    MyClass ob1(50);
    MyClass ob2;
    ob2 = ob1;
    ob1.setValue(100);
    ob2.print();
    return 0;
}

आउटपुट

50

यहां असाइनमेंट ऑपरेटर का उपयोग डीप कॉपी बनाने और अलग पॉइंटर स्टोर करने के लिए किया जाता है। एक बात ध्यान रखनी है। हमें सेल्फ-रेफरेंस की जांच करनी होगी अन्यथा असाइनमेंट ऑपरेटर वर्तमान ऑब्जेक्ट का मान बदल सकता है।

  1. - C++ में 'friend' का उपयोग कब करना चाहिए?

    किसी क्लास का फ्रेंड फ़ंक्शन उस क्लास के स्कोप के बाहर परिभाषित होता है लेकिन उसे उस क्लास के सभी प्राइवेट और प्रोटेक्टेड मेंबर्स को एक्सेस करने का अधिकार होता है। भले ही फ्रेंड फ़ंक्शन के प्रोटोटाइप क्लास परिभाषा में दिखाई देते हैं, फ्रेंड मेंबर फ़ंक्शन नहीं होते। एक फ्रेंड एक फ़ंक्शन, फ़ंक्शन टेम

  1. - C++ में यूनरी ऑपरेटर

    यूनरी ऑपरेटर वे ऑपरेटर हैं जो एक नया मान उत्पन्न करने के लिए एक ऑपरेंड पर कार्य करते हैं। यूनरी ऑपरेटर निम्नलिखित हैं: ऑपरेटर्स विवरण इनडायरेक्शन ऑपरेटर (*) यह एक पॉइंटर वेरिएबल पर कार्य करता है और उस पॉइंटर पते पर मान के बराबर एक l-value लौटाता है। इसे पॉइंटर को डीरेफरेंस करना कहा जाता है।

  1. - C# में असाइनमेंट ऑपरेटर क्या है

    C# में असाइनमेंट ऑपरेटर का उपयोग करके वेरिएबल को वैल्यू असाइन करें। C# में निम्नलिखित असाइनमेंट ऑपरेटर्स हैं - ऑपरेटर विवरण उदाहरण = सिंपल असाइनमेंट ऑपरेटर, राइट साइड ऑपरेंड्स से लेफ्ट साइड ऑपरेंड को वैल्यू असाइन करता है C = A + B, A + B की वैल्यू को C में असाइन करता है += एड AND असाइनमेंट