सी ++ विरासत - दुर्गम आधार?


157

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

मेरे पास मेरे मुख्य में निम्नलिखित हैं:

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

और इस तरह से फू से विरासत में मिली क्लास बार:

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

private:
    //snip
};

क्या यह काम नहीं करना चाहिए? मुझे लगता है कि मेरे मुख्य कार्य में वह कॉल करने में सक्षम नहीं है

जवाबों:


287

तुम्हें यह करना ही है:

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

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


28

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

class Bar : public Foo


14
विस्तार करने के लिए: एक में class, विरासत है private। में struct, विरासत publicडिफ़ॉल्ट रूप से है।
ट्रैविस गोकेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.