तीन मामलों नहीं है मैं के बारे में सोच सकते हैं:
आप बस मौजूदा वर्ग के लिए एक सूचक पास करना चाहते हैं जब:
class B;
struct A {
B* parent_;
A(B* parent) : parent_(parent) {}
};
struct B {
A* a;
B() : a(new A(this)) {}
};
एक निर्माता या सदस्य समारोह में, जहां एक सदस्य है एक तर्क द्वारा छायांकित:
struct A {
int a;
void set_a(int a) { this->a = a; }
};
यहां, सदस्य चर "ए" तर्क द्वारा छायांकित है ent "a", इसलिए this->
तर्क के बजाए सदस्य तक पहुंचने के लिए उपयोग किया जाता है।
(संपादित ऊपर के उदाहरण, बल्कि निर्माता की तुलना में एक समारोह होने के लिए के बाद से आप सामान्य रूप से एक निर्माता में इस तरह से निर्दिष्ट नहीं करेंगे)
जब एक सार्वजनिक/संरक्षित सदस्य चर या एक आधार वर्ग में समारोह तक पहुँचने एक टेम्पलेट वर्ग
template <class T>
struct A {
int a;
};
template <class T>
struct B : public A<T> {
int f() { return this->a; }
}
यहाँ से, a
अकेले नहीं एक आश्रित नाम, होगा तो संकलक B
में इसके बारे में एक घोषणा या B
का एक आधार है कि निर्भर नहीं करता है खोजने के लिए उम्मीद करेंगे T
पर। this->
जोड़ना this
के प्रकार पर निर्भर करता है, और this
एक आश्रित प्रकार है, a
का लुकअप f()
तत्काल है जब तक स्थगित कर दिया गया है।
return this->a
के बजाय return A::a
लिख सकता है, लेकिन this->
का उपयोग करके प्रत्यक्ष या अप्रत्यक्ष, कई आधारों की उपस्थिति में अधिक लचीला है। यह वैकल्पिक वाक्यविन्यास सदस्य चर और गैर वर्चुअल फ़ंक्शंस तक ही सीमित है - यदि इसका उपयोग वर्चुअल फ़ंक्शन के साथ किया जाता है, तो यह वर्चुअल फ़ंक्शन कॉल करने के बजाय फ़ंक्शन को सीधे कॉल किया जाएगा।
सी ++ अपने अंतिम विचार के लिए (एक मॉडल फार्म इस माता पिता के साथ खोलने के लिए) सही है, लेकिन के लिए जावा या सी #, यह हमेशा सम्मेलन – Geoffroy
नहीं है यही कारण है कि आप हमेशा अपने सदस्य का नाम आपके स्थानीय लोगों से अलग-अलग चर, उदाहरण के लिए 'm_myVar' या 'myVar_' और इसी तरह। चूंकि 'इस' का उपयोग करने से लागू नहीं किया जाता है, अधिकांश परियोजनाएं इसके बजाय सदस्य चर पर नामकरण मानक को मजबूर करने का विकल्प चुनती हैं। –
मैं नहीं कहूंगा कि यह हर समय 'इस' का उपयोग करने के लिए अच्छा फॉर्म है। नामों को छाया देने पर ही इसका इस्तेमाल करें। आम तौर पर छाया भी टाला जा सकता है। –