आपका कोड देखने की तरह होगा:
class Bag {
public:
Bag();
Bag(Bag const& other); // copy ctor, declared implicitly if you don't declare it
~Bag();
Bag operator+(Bag const& other) const;
private:
int x;
int y;
};
Bag Bag::operator+(Bag const& other) const {
Bag result (*this);
result.x += other.x;
result.y += other.y;
return result;
}
निहित "वर्तमान वस्तु" सदस्य कार्यों के लिए इस नाम के एक विशेष मूल्य द्वारा की ओर इशारा कर रहा है।तब *this
उस वस्तु हो जाता है (इस अपसंदर्भन द्वारा), और यह (कॉपी निर्माता के माध्यम से) के निर्माण के लिए प्रयोग किया जाता है एक और बैग परिणाम नाम दिया है।
मैं इस कोड एक होमवर्क असाइनमेंट से लिया जाता है पर शक है, तो आप one true addition operator पैटर्न का उपयोग करने में सक्षम नहीं हो सकता है, लेकिन यह सामान्य है और आप इसके बारे में पता होना चाहिए:
struct Bag {
//...
Bag& operator+=(Bag const& other) {
x += other.x;
y += other.y;
return *this; // return a reference to the "current object"
// as almost all operator=, operator+=, etc. should do
}
};
Bag operator+(Bag a, Bag const& b) {
// notice a is passed by value, so it's a copy
a += b;
return a;
}
स्रोत
2010-03-28 07:12:19
क्या 'ऑपरेटर +' फ़ंक्शन 'वापसी' कथन गायब है? –
यह मान्य सी ++ जैसा दिखता नहीं है - नया कीवर्ड – Artyom
है यदि आप ऑपरेटरों को बनाना चाहते हैं, तो मैं सुझाव देता हूं कि 'बूस्ट.ऑपरेटर्स' देखें। उन्होंने समान ऑपरेटरों को एक साथ समूहित किया है (जैसे '+ =' और '+') और समूह में से केवल एक को लिखना आपको दूसरों को मुफ्त में अनुदान देता है :) –