this पॉइंटर से संबंधित, मैं किसी की राय चाहता था कि कोड के नीचे दिए गए 2 स्निपेट समान कार्यक्षमता को लागू करते हैं या नहीं।

Position Position::operator = (Position pos)
{
     this->x = pos.x;
     this->y = pos.y;
     return *this;
}
Position & Position::operator = (Position pos)
{
     this->x = pos.x;
     this->y = pos.y;
}

मुझे पता है कि पहला स्निपेट अधिक सामान्यतः उपयोग किया जाता है। हालांकि, मैं पुष्टि करना चाहता हूं कि क्या दूसरा स्निपेट वही कार्यक्षमता करता है जैसा कि मैं & का उपयोग करके this ऑब्जेक्ट का संदर्भ दे रहा हूं।

c++
-2
Rejoy Mathews 16 मई 2019, 00:15

1 उत्तर

सबसे बढ़िया उत्तर

इस पोस्ट पर ध्यान दें जिसका उल्लेख @RemyLebeau ने अपने इच्छित विकल्प को चुनने से पहले किया था: ऑपरेटर ओवरलोडिंग के लिए बुनियादी नियम और मुहावरे क्या हैं?

दोनों के बीच अंतर का उदाहरण:

class Position1 {
public:
    int x, y;

    Position1 operator=(Position1 pos)
    {
        this->x = pos.x;
        this->y = pos.y;
        return *this;
    }
};

class Position2 {
public:
    int x, y;

    Position2& operator=(Position2 pos)
    {
        this->x = pos.x;
        this->y = pos.y;
        return *this;
    }
};

int main() {
    Position1 p11, p12;
    Position2 p21, p22;

    //Position1 *p13 = &(p12 = p11); // Compilation error: Taking address of temporary object..
    p21.y = 20;
    p21.x = 10;
    Position2 *p23 = &(p22 = p21); // Working - the `temporary object` is a reference to non temporary object.
    p23->x = 99;
    p23->y = 84;
    cout << p21.x << " " << p21.y; // didn't change
    cout << p22.x << " " << p22.y; // changed
    cout << p23->x << " " << p23->y; // changed

    //===================================================

    //(p12 = p11).y = 3; // Compiling error: Expression is not assignable
    (p22 = p21).y = 3; // works
    cout << p21.x << " " << p21.y << endl; // didn't change
    cout << p22.x << " " << p22.y << endl; // changed

    return 0;
}
2
KoralK 15 मई 2019, 21:45