2012-06-16 12 views
36

मैं निम्नलिखित वर्ग के लिए:अधिभार ब्रैकेट ऑपरेटरों [] हो और सेट

class risc { // singleton 
    protected: 
     static unsigned long registers[8]; 

    public: 
     unsigned long operator [](int i) 
     { 
      return registers[i]; 
     } 
}; 

आप देख सकते हैं के रूप में मैं "हो रही है" के लिए वर्ग कोष्ठक ऑपरेटर क्रियान्वित किया है।
अब मैं इसे सेटिंग के लिए कार्यान्वित करना चाहता हूं, यानी risc[1] = 2

यह कैसे किया जा सकता है?

उत्तर

52

इस प्रयास करें:

class risc { // singleton 
protected: 
    static unsigned long registers[8]; 

public: 
    unsigned long operator [](int i) const {return registers[i];} 
    unsigned long & operator [](int i) {return registers[i];} 
}; 
+11

तुम भी एक 'स्थिरांक लंबे और' लौट सकते हैं। यदि यह मूल प्रकार नहीं था तो उस तरह से वरीयता दी जाएगी, लेकिन 'लम्बे' जैसे प्रकारों के लिए इसे मूल्य से वापस करना ठीक है। –

+0

महान काम कर रहा है ... धन्यवाद! – SagiLow

+0

ध्यान दें कि यह सुनिश्चित करने के लिए कि यह 0 और 7 के बीच एक संख्या है, पर एक परीक्षण जोड़ने का अच्छा विचार होगा। और जब आप लंबे समय से अधिक जटिल प्रकारों से निपटते हैं, तो आप आमतौर पर एक संदर्भ वर्ग (riscDataRef) बनाते हैं जिसमें आवश्यक जानकारी होती है ताकि आप मुख्य कक्षा में परिवर्तन कर सकें। –

9

आपको अपने operator[] से एक संदर्भ वापस करने की आवश्यकता है ताकि कक्षा का उपयोगकर्ता इसे मूल्य निर्धारित करने के लिए उपयोग कर सके। तो फ़ंक्शन हस्ताक्षर unsigned long& operator [](int i) होगा।

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