2011-01-31 21 views
103

मुझे फ़ंक्शन पैरामीटर के रूप में बेस क्लास का उपयोग करने में असमर्थ लगता है, क्या मैंने अपनी विरासत को गड़बड़ कर दिया है?सी ++ विरासत - पहुंच योग्य आधार?

मैं अपने मुख्य में निम्नलिखित है:

int some_ftn(Foo *f) { /* some code */ }; 
Bar b; 
some_ftn(&b); 

और वर्ग बार इस तरह से फू से इनहेरिट:

class Bar : Foo 
{ 
public: 
    Bar(); 
    //snip 

private: 
    //snip 
}; 

यह काम नहीं करना चाहिए? मैं अपने मुख्य कार्य

उत्तर

199

में है कि कॉल करने के लिए सक्षम होने के लिए नहीं है आप ऐसा करने के लिए है:

class Bar : public Foo 
{ 
    // ... 
} 

सी में एक class ++ के डिफ़ॉल्ट विरासत प्रकार private, इसलिए किसी भी public और protected है बेस क्लास के सदस्य private तक सीमित हैं। दूसरी तरफ struct विरासत डिफ़ॉल्ट रूप से public है।

19

डिफ़ॉल्ट रूप से, विरासत निजी है। आप स्पष्ट रूप से public उपयोग करने के लिए:

class Bar : public Foo

+9

का विस्तार करने के लिए: एक 'class' में, विरासत' private' है। 'संरचना' में, विरासत डिफ़ॉल्ट रूप से 'public' है। –

संबंधित मुद्दे