2011-03-18 16 views
5

संभावित डुप्लिकेट:
c++ const use in class methods
Meaning of “const” last in a C++ method declaration?अंत में "const" क्यों डालें?

int operator==(const AAA &rhs) const; 

यह एक ऑपरेटर ओवरलोडिंग घोषणा है। अंत में const क्यों डालें? धन्यवाद

+2

संभव डुप्लिकेट http://stackoverflow.com/questions/5346695/c-const -उज-इन-क्लास-विधियों) (और कई अन्य!) – Johnsyweb

उत्तर

6

const कीवर्ड इंगित करता है कि विधि ऑब्जेक्ट को बदलने वाला नहीं है। चूंकि operator== तुलना के लिए है, इसलिए कुछ भी बदलने की जरूरत नहीं है। इसलिए, यह const है। इसे operator= जैसी विधियों के लिए छोड़ा जाना है जो ऑब्जेक्ट को संशोधित करते हैं।

यह कंपाइलर को यह सुनिश्चित करने के लिए आपके काम को दोबारा जांचने देता है कि आप ऐसा कुछ नहीं कर रहे हैं जिसे आप नहीं करना चाहते हैं। अधिक जानकारी के लिए http://www.parashift.com/c++-faq-lite/const-correctness.html देखें।

+0

एक और बेवकूफ सवाल, "()" में "const" पहले से ही गारंटी देता है कि ऑब्जेक्ट नहीं बदला जाएगा। क्या आखिरी "कॉन्स" डुप्लिकेट है? – user658266

+2

@ user658266 - अंत में 'const'' का अर्थ '()' में 'const' से भिन्न अर्थ है। अंत में 'const'' इंगित करता है कि जिस वस्तु को विधि कहा जाता है वह संशोधित नहीं होता है। जबकि '()' में 'const' दर्शाता है कि प्राप्त तर्क संशोधित नहीं किया गया है। – Mahesh

+1

@ user658266: "()" में "const" गारंटी देता है कि ओवरलोडेड ऑपरेटर "=" में पैरामीटर (इस मामले में rhs) के रूप में पारित तर्क को संशोधित नहीं किया जाता है।फ़ंक्शन के अंत में "कॉन्स्ट" इंगित करता है कि फ़ंक्शन उस ऑब्जेक्ट के किसी भी सदस्य को नहीं बदलता जिस पर इसे कहा जा रहा है। –

0

किसी भी सी ++ घोषणा के अंत में "कॉन्स्ट" संकलक को बताता है कि यह उस चीज़ को नहीं बदलेगा जो इससे संबंधित है।

+0

इस मामले में निर्दिष्ट? – user658266

0

यह विधि को स्थिर होने के रूप में चिह्नित करता है, जिसका अर्थ यह है कि जब भी आपके पास const प्रासंगिक ऑब्जेक्ट का संदर्भ होता है तो संकलक आपको विधि का उपयोग करने की अनुमति देगा। यदि आपके पास एक कॉन्स्ट संदर्भ है, तो आप अन्यथा केवल उन तरीकों का आह्वान कर सकते हैं जिन्हें कॉन्स्ट के रूप में भी घोषित किया जाता है।

0

एक विधि घोषणा के अंत में एक 'कॉन्स्ट' उस बिंदु को निरंतर वस्तु पर कॉल करने के लिए सुरक्षित होने के रूप में चिह्नित करता है।

2

एक विधि बनाना const क्लास के एक contant ऑब्जेक्ट को कॉल करने देगा। क्योंकि यह विधि ऑब्जेक्ट के किसी भी सदस्य (कंपाइलर त्रुटि) को परिवर्तित नहीं कर सकती है।

यह उल्लेखनीय हो सकता है कि const विधि के हस्ताक्षर का एक हिस्सा है, इसलिए उसी कक्षा में आपके पास एक ही प्रोटोटाइप के दो तरीके हो सकते हैं लेकिन एक कॉन्स है और दूसरा नहीं है। इस मामले में, यदि आप एक चर वस्तु से अधिभारित विधि को कॉल करते हैं तो गैर-कॉन्स्ट विधि को कॉल किया जाता है, और यदि आप इसे निरंतर ऑब्जेक्ट से कॉल करते हैं तो const विधि कहा जाता है।

हालांकि, यदि आपके पास केवल const विधि है (इसमें कोई गैर-कॉन्स अधिभार नहीं है), तो इसे चर और स्थिर ऑब्जेक्ट दोनों से कहा जाता है।

उदाहरण के लिए:

#include <iostream> 

using std::cout; 

class Foo 
{ 
public: 
    bool Happy; 
    Foo(): Happy(false) 
    { 
     // nothing 
    } 
    void Method() const 
    { 
     // nothing 
    } 
    void Method() 
    { 
     Happy = true; 
    } 
}; 

int main() 
{ 
    Foo A; 
    const Foo B; 
    A.Method(); 
    cout << A.Happy << '\n'; 
    B.Method(); 
    cout << B.Happy << '\n'; 
    return 0; 
} 

विल उत्पादन:

1 
0 
Press any key to continue . . . 
[वर्ग के तरीकों में C++ स्थिरांक उपयोग] (की
संबंधित मुद्दे