आमतौर पर? वह एक जैसे है। लेकिन संदर्भ के आधार पर, वे अलग-अलग चीजों का मतलब हो सकते हैं। जिसके परिणामस्वरूप,
void f() { std::cout << "f" << std::endl; }
class Cl {
public:
void f() { std::cout << "Cl::f" << std::endl; }
void g() {
struct Cl {
static void f() { std::cout << "inside Cl::f" << std::endl; }
};
void f();
f();
Cl::f();
this->f();
}
};
int main()
{
Cl a;
a.g();
return 0;
}
इस में, वैश्विक f
छाया सदस्य विधि f
की घोषणा:
उदाहरण के लिए, निम्नलिखित चरम उदाहरण पर विचार (एक वास्तविक परियोजना में ऐसा नहीं करते हैं!) कार्यक्रम f
Cl::f
के बजाय आउटपुट।
स्थानीय struct Cl
भी अपने स्वयं के टाइपनाम को छाया करता है, जिसके परिणामस्वरूप Cl::f()
इसकी स्थिर f
विधि को कॉल करता है।
केवल this->f()
पर कॉल करने से Cl::f
पर कॉल करने में स्पष्ट रूप से परिणाम मिलते हैं।
टाइपनाम का संस्करण आमतौर पर तब भी प्रयोग किया जाता है जब आप विरासत का उपयोग करते समय अभिभावक वर्ग में विधियों को कॉल करना चाहते हैं और आभासी तरीकों को ओवरराइड करते हैं - लेकिन यह तकनीकी रूप से समान वर्ग नहीं है।
इस सवाल का जवाब इस नए प्रलेखन thingy के लिए अच्छा उम्मीदवार है। – Dialecticus