मैं तीन अलग-अलग आधार वर्ग है:सी ++ समारोह अधिभावी
class BaseA
{
public:
virtual int foo() = 0;
};
class BaseB
{
public:
virtual int foo() { return 42; }
};
class BaseC
{
public:
int foo() { return 42; }
};
मैं तो (ए, बी या सी के लिए विकल्प के एक्स) इस तरह आधार से निकाले जाते हैं:
class Child : public BaseX
{
public:
int foo() { return 42; }
};
कैसे समारोह है तीन अलग-अलग आधार वर्गों में ओवरराइड? क्या मेरी तीन निम्नलिखित धारणाएं सही हैं? क्या कोई अन्य चेतावनी है?
- बेसए के साथ, बाल वर्ग संकलित नहीं होता है, शुद्ध वर्चुअल फ़ंक्शन परिभाषित नहीं किया जाता है।
- बेसबी के साथ, बेसबी * या चाइल्ड * पर foo को कॉल करते समय बच्चे में फ़ंक्शन को कॉल किया जाता है।
- बेससी के साथ, बच्चे में फ़ंक्शन को बाल * पर foo कॉल करते समय बुलाया जाता है लेकिन बेसबी * पर नहीं (पैरेंट क्लास में फ़ंक्शन कहा जाता है)।
क्या कोई विशिष्ट कारण है कि मैं ऐसा नहीं करना चाहता हूं? यद्यपि मैं नहीं कर सकता, इसके विपरीत, एक उदाहरण के साथ आना जहां मैं चाहता हूं *। क्या कोई तकनीकी कारण है या इसे सिर्फ "खराब अभ्यास" माना जाता है? – Mizipzor
मुझे कोई तकनीकी कारण नहीं दिख रहा है लेकिन यह वास्तव में भ्रमित है। – Naveen
@ मिज़िपोजर शायद आप किसी और के वर्ग के रूप में विरासत में हैं, लेकिन आपके पास उनका कोड नहीं है। आदर्श डिजाइन नहीं है लेकिन यह हो सकता है। – Kae