व्युत्पन्न कक्षा में संरक्षित कन्स्ट्रक्टर को आमंत्रित करने की अनुमति नहीं है, जैसा कि here समझाया गया है।व्युत्पन्न कक्षाओं में संरक्षित स्थैतिक विधि को क्यों कॉल करने की अनुमति है?
स्वीकार किए जाते हैं जवाब है कि protected
अनुदान आधार वर्ग A
का एक उद्देश्य के सदस्यों के लिए पहुँच ही जब वर्ग A
की उस वस्तु वर्ग B
की एक subobject है बताते हैं। अब तक सब ठीक है.
लेकिन फिर, स्थिर संरक्षित तरीकों को कॉल करने के लिए इसकी अनुमति क्यों है (कम से कम जीसीसी 4.6.3 में)? विशेष रूप से, यह मेरे लिए कोई मतलब नहीं है कि निम्नलिखित compiles, जबकि टिप्पणी की लाइन नहीं करता है:
class A
{
protected:
A() {}
static A makeA() { return A(); }
};
class B: public A
{
public:
static A makeAFromB()
{
return makeA(); // compiles
// return A(); // does not compile
}
};
दार्शनिक, एक निर्माता वर्ग A
, कारण है कि की एक वस्तु लौटने एक स्थिर विधि की तरह काफी है मुझे यहाँ व्यवहार में अंतर नहीं मिलता है।
आपको 'वापसी ए :: ए() '' रिटर्न ए() 'में बदलना चाहिए। यह अभी भी संकलित नहीं होगा, लेकिन इस बार यह 'संरक्षित' पहुंच से संबंधित एक कारण के लिए होगा, जिससे सवाल स्पष्ट हो जाएगा। – interjay
आप बिल्कुल सही हैं, संपादित करें। स्पष्टीकरण के लिए – Boris