2016-11-30 8 views
5

मैं सी ++ में प्रोग्रामिंग के लिए काफी नया हूं इसलिए क्षमा करें अगर यह बेवकूफ है। मैं C++ प्राइमर पुस्तक के माध्यम से काम कर रहा हूं, और ऐसा कुछ है जो मैं अपने सिर को चारों ओर नहीं ले सकता। उदाहरण के लिए इस समारोह लें:किसी सदस्य फ़ंक्शन में क्लास ऑब्जेक्ट को वापस करने का क्या अर्थ है?

Sales_data& Sales_data::combine(const Sales_data &rhs) 
{ 
    units_sold += rhs.units_sold; 
    revenue += rhs.revenue; 
    return *this; 
} 

और हम का उपयोग कर समारोह कहा जाता है:

total.combine(trans); 

मैं कि इकाइयों की कुल वस्तु में & राजस्व बेचा ट्रांस वस्तु में है कि के साथ जोड़ा जाएगा, काम यौगिक असाइनमेंट ऑपरेटर (+ =) की तरह।

मुझे लगता है कि इस कुल वस्तु वापसी होगी मिलता है, लेकिन मैं क्या कुल वस्तु लौटने का मतलब मिल न ...

उत्तर

9

(वस्तु पर बुलाया जा रहा है के लिए) संदर्भ द्वारा रिटर्निंग मतलब है कि आप एक में कॉल श्रृंखला सकता है लाइन कोड; इन सभी कॉलों को एक वस्तु के लिए बाध्य किया जाएगा:

total.combine(trans); 
total.combine(trans2); 
total.combine(trans3); 

(बेशक यह मतलब नहीं है कि आप एक ही विधि कॉल करने के लिए है, आप के साथ मिश्रण कर सकते हैं:

total.combine(trans).combine(trans2).combine(trans3); 

साथ बराबर है जो । समान विशेषता के साथ अन्य तरीकों)

यह मुहावरा अक्सर operator=, operator<<, operator>> आदि, जो भी चेनिंग साथ कहा जा संभव हो रहे हैं जैसे ऑपरेटरों के कार्यान्वयन में प्रयोग किया जाता है:

a = b = c; 
cout << a << b << c; 
7

यह स्वयं का संदर्भ देता है, यह विधि श्रृंखला को अनुमति देता है।

Sales_data s1, s2, total; 
//stuff.. 
total.combine(s1).combine(s2); 

क्योंकि आप एक संदर्भ लौट इस अनुमति देता है total वस्तु के बीच में संशोधित किया जा करने के लिए: उदाहरण के लिए, आप कर सकते हैं तो "श्रृंखला" कॉल आप 2 Sales_data वस्तुओं है कहते हैं और आप उन दोनों को संयोजित करना चाहते हैं, कॉल, यही कारण है कि इसे "चेन" कहा जाता है।

3

इस उदाहरण में, आप total पर संदर्भ लौट रहे हैं, जो हमें total.combine(trans) अभिव्यक्ति का उपयोग total ऑब्जेक्ट के रूप में करने की अनुमति देता है।

उदाहरण के लिए, यदि operator<<Sales_data के लिए ओवरलोड हो गया है, हम बस को जोड़ सकते हैं और प्रिंट इस तरह कुल बदल दिया है:

std::cout << total.combine(trans); 

या हम कर सकते हैं श्रृंखला के तरीकों, हम की तरह, एक ही वस्तु के लिए कई बार गठबंधन करना चाहते हैं इस:

total.combine(trans).combine(trans1); 

इस उदाहरण में, total संयुक्त है, और एक ही total वस्तु दिया जाता है, और हम एक बार फिर पहले से ही बदल वस्तु के साथ जोड़ सकते हैं।

कोड को सरल बनाने के लिए यह एक अच्छा पैटर्न है, जब आपको उसी अभिव्यक्ति में परिवर्तित ऑब्जेक्ट का उपयोग करने की आवश्यकता होती है।

3

आपका उपरोक्त नमूना कक्षा के बाद & संदर्भ प्रतीक का उपयोग करता है।यह आपको * का उपयोग करके अपने मौजूदा क्लास ऑब्जेक्ट के संदर्भ को वापस करने देता है। संदर्भ में सभी का मतलब है कि आप स्टैक पर अपनी ऑब्जेक्ट में पॉइंटर लौट रहे हैं। यह डेज़ी-चेनिंग कॉल के लिए वाक्य रचनात्मक रूप से उपयोगी है।

total.combine(trans).combine(trans2).combine(trans3); 
संबंधित मुद्दे