में दादा दादी अधिभारित कार्य मुझे समझने की आवश्यकता है कि क्यों सी ++ बच्चे में दादा-भारित फ़ंक्शन घोषित किए जाने पर बच्चे में दादा-दाएं अधिभारित कार्यों तक पहुंचने की अनुमति नहीं देता है। निम्न उदाहरण पर विचार करें:बच्चे
class grandparent{
public:
void foo();
void foo(int);
void test();
};
class parent : public grandparent{
public:
void foo();
};
class child : public parent{
public:
child(){
//foo(1); //not accessible
test(); //accessible
}
};
Grandparent में यहाँ, दो कार्यों foo() और foo (int) अतिभारित रहे हैं काम करता है। लेकिन foo (int) पहुंच योग्य नहीं है क्योंकि foo() को अभिभावक में घोषित किया गया है (इससे कोई फर्क नहीं पड़ता कि यह घोषित सार्वजनिक या निजी या संरक्षित है)। हालांकि, परीक्षण() सुलभ है, जो ओओपी के अनुसार सही है।
मुझे इस व्यवहार के कारण को जानने की आवश्यकता है।
क्या कोई कारण है कि यह व्यवहार एक अच्छी बात है? (यानी ** क्यों ** किस कारण से, * क्यों * इसके कारण के रूप में * –
@ संजय मानोहर का एकमात्र उपयोग गलतियों को रोकने के लिए होगा - यानी सोच रहा है कि आप माता-पिता से एक विधि बुला रहे हैं और वास्तव में दादा से एक विधि बुला रहा है, क्योंकि आप एक पैरामीटर चूक गए। और आप 'उपयोग' निर्देश के साथ इसके चारों ओर जा सकते हैं। –
@ संजय मानोहर http://stackoverflow.com/questions/4837399/c-rationale-behind-hiding-rule देखें –