2014-06-26 5 views
5

मान लीजिए मैं निम्नलिखित वर्ग है:यदि आप कक्षा में "यह" का उपयोग नहीं करते हैं तो क्या होता है?

class foo{ 
public: 
     int someNum; 
     void calculation(int someNum); 

}; 

परिभाषा:

void foo::calculation(int someNum){ 
     someNum = someNum; 
} 
अब लाइन someNum = someNum, जो someNum करने के लिए भेजा जा रहा है में

? अगर मैं कार्य करें:

this->someNum = someNum 

तो दूसरा someNum क्या है?

इस समस्या से बचने के लिए अच्छी नामकरण शैली क्या है? उदाहरण के लिए, उद्देश्य-सी में, एक सदस्य चर नाम से पहले एक उपसर्ग "_"। (उदाहरण: _someNum);

उत्तर

9

एक सदस्य समारोह पैरामीटर नाम छुपाता समान वर्ग के सदस्य के नाम, अंदर

void foo::calculation(int someNum){ 
     someNum = someNum; 
} 

में तो दोनों someNum रों पैरामीटर की बात कर रहे। यह एक स्व-असाइनमेंट है जो this->someNum नहीं बदलता है।

this->someNum = someNum; में, दूसरा someNum फ़ंक्शन पैरामीटर को संदर्भित करता है। इसलिए यह वर्ग सदस्य someNum पर फ़ंक्शन पैरामीटर someNum का मान असाइन करता है।

आम नामकरण सम्मेलनों में m या m_ उपसर्ग या कक्षा सदस्यों के लिए _ पोस्टफ़िक्स शामिल हैं। एक उपसर्ग अंडरस्कोर समस्याग्रस्त हो सकता है क्योंकि सी ++ एक अंडरस्कोर के साथ शुरू होने वाले नामों को पूंजी पत्र के बाद सुरक्षित करता है।


ध्यान दें कि कंस्ट्रक्टर्स में सदस्य प्रारंभकर्ता सूचियों एक विशेष मामला है:

foo(int someNum) : someNum(someNum) { someNum = someNum; } 
       ^ ^  ^  ^
        |  |   |   | 
        |  ---------------------- 
        |  These three all refer to the parameter 'someNum', 
        |  and not the class member. 
        | 
    The language requires this name to be referring 
    to a class member (or a base class) and so the 
    parameter called 'someNum' is not considered. 
+5

यह ध्यान देने योग्य है कि इस नियम एक निर्माता के सदस्य प्रारंभकर्ता सूची पर लागू नहीं होता लायक है। 'foo (int someNum): someNum (someNum) {} 'सही काम करता है। – sbabbi

+0

@sbabbi धन्यवाद, जोड़ा गया। –

1

आंतरिकतम दायरे में घोषित वैरिएबल बाहरी क्षेत्रों में चर को छाया करता है। तो foo::calculation में सदस्य चर someNum पर कोई प्रभाव नहीं पड़ता है। इसके बजाए, कुछ नन में दिए गए तर्क को संदर्भित किया जाता है। इसे कम करने में सहायता के लिए, नामकरण मानकों का सुझाव है कि आपके सदस्य चर को लगातार पहचानकर्ता - "m_" के साथ उपसर्ग करना है, उदाहरण के लिए।

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

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