2016-10-11 6 views
6

मेरे पास सवाल है, मेरे कोड उदाहरण में असाइनमेंट अभिव्यक्ति को वापस करने का क्या अर्थ है? मेरे पास एक enum है, और मैं ++: ऑपरेटर ओवरराइड किया है। तो मेरे छोटे उदाहरण में लिग्स के बीच स्विच करना संभव है - लेकिन कोड में कोई हिस्सा नहीं है जिसे मैं समझ नहीं पा रहा हूं। कोड संकलित और ठीक काम करते हैं।असाइनमेंट ऑपरेटर का मतलब रिटर्न स्टेटमेंट्स में क्या होता है, जैसे रिटर्न टी = ...?

कोड:

enum Traficlight 
{green, yellow, red }; 

Traficlight& operator++(Traficlight& t) 
{ 
    switch (t) 
    { 
    case green: return t = Traficlight::yellow; //Here <-- 
    case yellow: return t = Traficlight::red; //Here <-- 
    case red: return t = Traficlight::green; //Here <-- 
    default: 
     break; 
    } 
} 

int main() 
{ 


    Traficlight Trafic = Traficlight::green; 
    Trafic++; 

    if (Trafic == Traficlight::yellow) 
    { 
     cout << "Light is Yellow" << endl; 
    } 

    string in; 

    cin >> in; 

} 

क्या "वापस टी = Traficlight :: पीले" का क्या मतलब है, क्यों नहीं कर सकते मैं सिर्फ "Traficlight :: पीले" वापस जाएँ।

+0

असाइनमेंट ऑपरेटर के वापसी मूल्य पर अधिक जानकारी के लिए, यहां देखें: http://stackoverflow.com/questions/14697643/low-level-details-of-cc-assignment-operator-implementation-what-does- यह-रेटू –

+3

यह 't = x जैसा ही है; वापसी x; '। – 0x499602D2

+1

यह कोड संकलित नहीं करता है: आप preincrement 'ऑपरेटर ++' को परिभाषित करते हैं लेकिन postincrement 'ऑपरेटर ++' का उपयोग करते हैं। – aschepler

उत्तर

5

रिटर्न निर्देशों में, ऑपरेटर t को निर्दिष्ट करता है जो एक संदर्भ (इसे संशोधित करता है) फिर मान देता है।

यही एक वृद्धिशील ऑपरेटर करता है: & संशोधित करता है एक ही समय में संदर्भ देता है ताकि वृद्धिशील मूल्य दूसरे ऑपरेशन में उपयोग किया जा सके।

0

यह t वैरिएबल (और आपके कोड t में संदर्भ प्रकार है इसलिए संदर्भ प्रकार बाहर है), और उसके बाद t चर का मान वापस लौटाता है।

3

t = Traficlight::yellowTraficlight::yellowt में लिखता है। कि अभिव्यक्ति का परिणाम भी Traficlight::yellow है, इसलिए इस:,

t = Traficlight::yellow; 
return t; 

ऊपर समारोह, t के संदर्भ में तर्क के रूप में प्राप्त किया गया था में इतना बदल रहा t के मूल्य में है:

return t = Traficlight::yellow; 

के बराबर है तथ्य प्रासंगिक है।

2

आपका समारोह संदर्भ द्वारा तर्क प्राप्त करता है:

Traficlight& operator++(Traficlight& t) 

और यह एक ++ ऑपरेटर है, इसलिए शब्दार्थ यह संकार्य है बढ़ाने के और फिर उस संकार्य पर लौटने संदर्भ चाहिए। तो आपको दो क्रियाएं करनी होंगी:

// Assign new value to the t 
t = Traficlight::yellow; 
// Return rusult 
return t; 

यह एक पंक्ति में लिखा जा सकता है क्योंकि असाइनमेंट ऑपरेटर असाइन किए गए मान को वापस कर देता है।

संबंधित मुद्दे