आप बिंदु # 1 पर सही हैं। private
, protected
या public
निर्दिष्ट करते समय बेस क्लास से विरासत प्राप्त करने से व्युत्पन्न कक्षा में कुछ भी नहीं पहुंचता है। उन अभिगम विनिर्देशकों ने कंपाइलर को बेस-क्लास सदस्यों का इलाज कैसे किया है, जब व्युत्पन्न वर्ग के उदाहरण कहीं और उपयोग किए जाते हैं, या यदि व्युत्पन्न कक्षा को अन्य वर्गों के लिए बेस क्लास के रूप में उपयोग किया जाता है।
अद्यतन: निम्नलिखित मतभेदों को वर्णन करने में मदद कर सकते हैं:
class Base
{
private: int base_pri;
protected: int base_pro;
public: int base_pub;
};
आधार से व्युत्पन्न वर्ग के लिए:
class With_Private_Base : private Base { void memberFn(); };
class With_Protected_Base : protected Base { void memberFn(); };
class With_Public_Base : public Base { void memberFn(); };
// this would be the same for all of the above 3 classes:
void With_PXXX_Base::memberFn()
{
base_pri = 1; // error: `int Base::base_pri' is private
base_pro = 1; // OK
base_pub = 1; // OK
}
3 व्युत्पन्न वर्ग से व्युत्पन्न वर्ग के लिए:
class A : public With_Private_Base { void memberFn(); }
void A::memberFn()
{
base_pri = 1; // error: `int Base::base_pri' is private
base_pro = 1; // error: `int Base::base_pro' is protected
base_pub = 1; // error: `int Base::base_pub' is inaccessible
}
class B : public With_Protected_Base { void memberFn(); }
void B::memberFn()
{
base_pri = 1; // error: `int Base::base_pri' is private
base_pro = 1; // OK
base_pub = 1; // OK
}
class C : public With_Public_Base { void memberFn(); }
void C::memberFn()
{
base_pri = 1; // error: `int Base::base_pri' is private
base_pro = 1; // OK
base_pub = 1; // OK
}
पहले तीन व्युत्पन्न वर्गों तक बाहरी पहुंच:
void main()
{
With_Private_Base pri_base;
pri_base.base_pri = 1; // error: `int Base::base_pri' is private
pri_base.base_pro = 1; // error: `int Base::base_pro' is protected
pri_base.base_pub = 1; // error: `int Base::base_pub' is inaccessible
With_Protected_Base pro_base;
pro_base.base_pri = 1; // error: `int Base::base_pri' is private
pro_base.base_pro = 1; // error: `int Base::base_pro' is protected
pro_base.base_pub = 1; // error: `int Base::base_pub' is inaccessible
With_Public_Base pub_base;
pub_base.base_pri = 1; // error: `int Base::base_pri' is private
pub_base.base_pro = 1; // error: `int Base::base_pro' is protected
pub_base.base_pub = 1; // OK
}
स्रोत
2010-01-28 18:41:18
संरक्षित विरासत और सार्वजनिक विरासत समान हैं? –
@ फ़हाद: व्युत्पन्न वर्ग के दृष्टिकोण से, हां, वे हैं। बाहरी पहुंच बिंदु से (मेरे उत्तर में कोड का अंतिम ब्लॉक) वे काफी अलग हैं। –