2011-08-02 11 views
12

जावा में आप वर्तमान ऑब्जेक्ट प्राप्त करने के लिए बस return this कर सकते हैं। आप इसे C++ में कैसे करते हैं?सी ++ में "यह" वापस लौटें?

जावा:

class MyClass { 

    MyClass example() { 
     return this; 
    } 
} 
+2

इस प्रकार सूचक के रूप में पिछले परिणाम व्यवहार करेगा, हो सकता है कि आप का उपयोग कर यह परीक्षण करना चाहिए (लगभग) एक ही कोड और देखें कि परिणाम क्या है? साथ ही, उपरोक्त कोड में आपकी विधि एक शून्य विधि है, इसलिए आप शायद कुछ भी वापस नहीं करना चाहते हैं। –

उत्तर

27

ठीक है, पहले, आप void-वापसी समारोह से कुछ भी वापस नहीं कर सकते हैं।

कुछ ऐसा करने के तीन तरीके हैं जो वर्तमान ऑब्जेक्ट तक पहुंच प्रदान करते हैं: पॉइंटर द्वारा, संदर्भ द्वारा, और मूल्य के अनुसार।

class myclass { 
public: 
    // Return by pointer needs const and non-const versions 
     myclass* ReturnPointerToCurrentObject()  { return this; } 
    const myclass* ReturnPointerToCurrentObject() const { return this; } 

    // Return by reference needs const and non-const versions 
     myclass& ReturnReferenceToCurrentObject()  { return *this; } 
    const myclass& ReturnReferenceToCurrentObject() const { return *this; } 

    // Return by value only needs one version. 
    myclass ReturnCopyOfCurrentObject() const { return *this; } 
}; 

जैसा कि इंगित किया गया है, तीनों तरीकों में से प्रत्येक मौजूदा वस्तु को थोड़ा अलग रूप में लौटाता है। आप जो भी उपयोग करते हैं उस पर निर्भर करता है कि आपको किस फॉर्म की आवश्यकता है।

+3

कॉन्स संस्करणों को न भूलें। –

+3

हाय, मैं 'स्थिरांक की आवश्यकता नहीं है और न कि संस्करणों को स्थापित कर सकता हूं'। मैं इसे समझ नहीं सकता। यदि विधि कक्षा के सदस्य नहीं बदलती है, तो मैं कॉन्स्ट संस्करण लिखता हूं, अन्यथा - न लिखें। मुझे दोनों की ज़रूरत क्यों है? –

0

क्योंकि वापसी प्रकार void है, यानी .: आप घोषणा करते हैं कि आप कुछ भी वापस नहीं है। *this के माध्यम से कक्षा के संदर्भ में वापसी के लिए myclass & पर myclass & पर वापस जाने के लिए इसे myclass* पर this पर बदलें।

6

कक्षाओं में संदर्भ द्वारा वापसी के मुख्य लाभों में से एक आसानी से चेन फ़ंक्शन की क्षमता है।

मान लीजिए कि आपका सदस्य कार्य आपकी कक्षा के किसी विशेष सदस्य को गुणा करना है। यदि आप शीर्ष लेख और स्रोत फ़ाइलों के प्रारूप वर्ग की जानकारी और सदस्य समारोह की परिभाषा अलग ढंग से, तो रखने के लिए: हेडर फाइल myclass.h

#ifndef myclass_h 
#define myclass_h 
class myclass{ 
    public: 
    int member1_; 
    double member2_; 

    myclass(){ 
     member1_ =1; 
     member2_ = 2.0; 
    }  

    myclass& MULT(int scalar); 
    myclass* MULTP(double scalar); 
} 
#endif 

स्रोत फ़ाइल: myclass.cpp

myclass& myclass::MULT(int scalar){ 
     member1_ *= scalar; 
     return *this; 
} 
myclass* myclass::MULTP(double scalar){ 
     member2_ *= scalar; 
     return this; 
} 

आप एक वस्तु के ऊपर डिफ़ॉल्ट निर्माता का उपयोग कर वर्ग कहा जाता है, सेट member1_ ​​1 के बराबर प्रारंभ हैं: फिर अपने मुख्य कार्य में, आप इस तरह के रूप में चेन कर सकते हैं:

myclass class; 
class.MULT(2).MULT(4); 

तब सदस्य 1_ अब 8 होगा। बेशक, विचार अलग-अलग कार्यों, को चेन करना और यह अलग-अलग सदस्यों को बदलना है।

मामले आप सूचक द्वारा वापसी उपयोग कर रहे हैं, पहली कॉल वस्तु, और बाद में किसी भी कॉल का उपयोग

class.MULTP(2.0)->MULTP(3.0); 
संबंधित मुद्दे