मैं एक टेम्पलेट वर्ग सरणी है:सी ++ - ओवरलोडिंग [] ऑपरेटर
template <class T=int, int SIZE=10>
class Array {
T TheArray[SIZE];
public:
void Initialize() {
for (int idx=0; idx < SIZE; idx++) {
TheArray[idx] = T();
}
}
T& operator [](int idx) {
return TheArray[idx];
}
T operator [](int idx) const {
return TheArray[idx];
}
}
मैं ऑपरेटर []
अधिक भार पर कुछ सवाल हैं (मैं नेट पर इस उदाहरण पाया जाता है)।
मुझे लगता है कि T& operator [](int idx)
इंडेक्स idx
के साथ सरणी मान का संदर्भ देता है और T operator [](int idx) const
इसका मूल्य देता है। हालांकि, मुझे यकीन नहीं है कि []
ऑपरेटर का उपयोग करके मुझे कौन सा केस संदर्भ या मान वापस कर दिया जाएगा।
इसके अलावा, अगर मैं T operator [](int idx) const
->T operator [](int idx)
बदलता हूं, तो संकलक शिकायत करता है। ऐसा क्यों है? मैं समझ सकता हूं कि कंपाइलर शिकायत करता है क्योंकि केवल वापसी प्रकार अलग है, लेकिन const
को कब जोड़ा जाता है जब यह शिकायत नहीं करता है? इसका मतलब यह है कि कक्षा के इंटर्न के गैर संशोधित नहीं हैं, है ना?
मैं इस छोटे से मुख्य कार्यान्वयन डिबग करने की कोशिश की:
int main() {
int val;
Array<> intArray;
intArray.Initialize();
val = intArray[1];
printf("%d", intArray[1]);
intArray[1] = 5;
}
और हर बार T& operator [](int idx)
कहा जाता है। क्यूं कर?
अग्रिम धन्यवाद।
एक तरफ ध्यान दें, 'प्रारंभिक' जैसे कार्यों के लिए उचित रचनाकारों को प्राथमिकता दें। सी ++ आपको ऑब्जेक्ट प्रारंभ करने के लिए एक आदर्श टूल देता है, और इसे कन्स्ट्रक्टर कहा जाता है। – SergeyA