मैं कक्षा को अपने 'इस' सूचक को अपने इंटरफेस में से किसी एक के सूचक में बदलने में सक्षम होने से रोकने की कोशिश कर रहा हूं। मैं इसे एक मध्य प्रॉक्सी कक्षा के माध्यम से निजी विरासत का उपयोग करके करता हूं। समस्या यह है कि मुझे निजी विरासत पदानुक्रम में विरासत वर्ग के तहत सभी वर्गों के लिए सभी सार्वजनिक स्थैतिक सदस्यों और आधार वर्ग के प्रकारों को पहुंच योग्य बनाता है।सी ++ निजी विरासत और स्थिर सदस्य/प्रकार
class Base
{
public:
enum Enum
{
value
};
};
class Middle : private Base
{
};
class Child : public Middle
{
public:
void Method()
{
Base::Enum e = Base::value; // doesn't compile BAD!
Base* base = this; // doesn't compile GOOD!
}
};
मैंने इसे वीएस -2008 (आवश्यक संस्करण) और वीएस -2010 दोनों में करने की कोशिश की है, न तो काम।
क्या कोई कामकाज के बारे में सोच सकता है? या रूपांतरण को रोकने के लिए एक अलग दृष्टिकोण?
मैं भी व्यवहार के curios हूँ, यह सिर्फ कंपाइलर कार्यान्वयन का एक दुष्प्रभाव है, या यह डिजाइन द्वारा है? अगर डिजाइन द्वारा, तो क्यों? मैंने हमेशा निजी विरासत के बारे में सोचा कि इसका मतलब है कि कोई भी बेस से मध्य विरासत को नहीं जानता है। हालांकि, प्रदर्शित व्यवहार का अर्थ है कि निजी विरासत का मतलब उससे कहीं अधिक है, असल में बच्चे को श्रेणी पदानुक्रम में किसी भी नामस्थान की तुलना में बेस तक कम पहुंच नहीं है!
+1: वास्तव में एक बहुत ही रोचक सवाल है। –