पहली बार अनुमति नहीं है क्योंकि यह अस्पष्ट परिभाषाओं की ओर जाता है। दूसरे में, यद्यपि आपके पास सार्वजनिक और निजी दोनों a
पूर्णांक चर है, तो आपने अपनी बी कक्षा के अंदर ए :: छुपाया है। कंपाइलर निश्चित रूप से जानता है कि आप क्या चाहते हैं क्योंकि एक छिपे हुए चर को स्पष्ट रूप से एक्सेस करने का कोई तरीका है।
मुझे यह भी विश्वास है कि यह मैंगलिंग नाम देने के लिए उबलता है: भंडारण विनिर्देश वास्तविक नाम के हिस्से के रूप में समाप्त नहीं होते हैं। हालांकि मैं इस पर गलत हो सकता था।
यह स्पष्ट करने का सबसे आसान तरीका है कि किसी को अनुमति क्यों दी जाती है और दूसरा यह नहीं है कि संकलक प्रत्येक चर का उपयोग करने वाले सदस्य फ़ंक्शन को कैसे संकलित करेगा।
अपने वर्ग ख अंदर
:
class b {
int a;
public:
int a;
void myMethod()
{
a = 10; //what a should the compiler use? Ambiguous, so the compiler sez BZZT.
}
}
2 उदाहरण के लिए:
class A
{
public:
int a;
}
class B: public A
{
private:
int a;
void someMethod()
{
a = 10; //implied that you are using B::a (which may be a programmer error)
}
}
@Neil: आपका मतलब है कि दूसरा वर्ग कक्षा ए घोषित करता है? – Alan
@ आलान हां - मैं इस सवाल से इतना उलझन में था कि मुझे थोड़ा उलझन मिला :-) –
इसका डाउनवोट क्यों है? यह एक उचित सवाल है, मुझे सी ++ में कक्षाएं सीखते समय वही बात सोचना याद है ... – Cam