2012-12-03 12 views
5

सामान्य में के लिए [] ऑपरेटर ओवरलोडिंग, तुम कैसे दोनों पढ़ने और लिखने एक्सेस होती के लिए एक वर्ग के सूचकांक [ ] ऑपरेटर की घोषणा करते हैं?सी ++: पढ़ने और लिखने का उपयोग

मैं

/** 
* Read index operator. 
*/ 
T& operator[](T u); 

/** 
* Write index operator 
*/ 
const T& operator[](T u); 

की तरह कुछ जो मुझे त्रुटि

../src/Class.h:44:14: error: 'const T& Class::operator[](T)' cannot be overloaded 
../src/Class.h:39:8: error: with 'T& Class::operator[](T)' 

उत्तर

14

आपका परिवर्तनशील संस्करण ठीक है:

T& operator[](T u); 

लेकिन const संस्करण एक const सदस्य समारोह होना चाहिए और साथ ही एक const संदर्भ लौटने:

const T& operator[](T u) const; 
         ^^^^^ 

यह न केवल यह अन्य से अलग करता है अधिभार, लेकिन आपकी कक्षा के const उदाहरणों तक पहुंच (केवल पढ़ने के लिए) की अनुमति देता है। आम तौर पर, अधिभारित सदस्य कार्यों को उनके पैरामीटर प्रकारों और कॉन्स/अस्थिर योग्यता से अलग किया जा सकता है, लेकिन उनके रिटर्न प्रकारों द्वारा नहीं किया जा सकता है।

6

आप बस कि इस्तेमाल किया जा जाएगा एक अधिभार दोनों रीड और राईट के लिए देता है की कोशिश की:

T& operator[](int); 

ऐसा कहकर, आप const अधिभार भी प्राप्त कर सकते हैं:

const T& operator[](int) const; 

यह आपकी कक्षा के const उदाहरणों में केवल-पढ़ने वाली अनुक्रमणिका प्रदान करेगा।

+0

बस आगे स्पष्टीकरण जोड़ने के लिए, ऐसा इसलिए है क्योंकि ऑपरेटर ओवरलोड ऑब्जेक्ट का संदर्भ देता है। यह आपको इसे असाइन करने के साथ-साथ इसे पढ़ने की अनुमति देता है, इसलिए केवल एक अधिभार की आवश्यकता है। – Chris

2

आप त्रुटि मिलती है क्योंकि अतिभारित कार्यों वापसी प्रकार से केवल अलग नहीं कर सकते हैं। लेकिन वे कॉन्स्टेस से भिन्न हो सकते हैं।

/** 
* Write index operator. 
*/ 
T& operator[](T u); 

/** 
* Read index operator 
*/ 
const T& operator[](T u) const; 

नोट "लिखो" और "पढ़ा" स्थानांतरित करें।

इसके अलावा, आप वास्तव में ऑपरेटर का तर्क कुछ अभिन्न प्रकार होना मतलब यह नहीं है?

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

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