मैं स्पष्ट कहने का जोखिम उठाऊंगा: आप फ़ंक्शन को कॉल करते हैं, यदि यह आधार वर्ग में परिभाषित है, तो यह स्वचालित रूप से व्युत्पन्न वर्ग में उपलब्ध है (जब तक कि यह नहीं है private
)।
यदि व्युत्पन्न वर्ग में एक ही हस्ताक्षर के साथ एक फ़ंक्शन है, तो आप इसे आधार वर्ग के नाम के साथ दो कॉलोन जोड़कर इसे मना कर सकते हैं base_class::foo(...)
। आपको ध्यान देना चाहिए कि जावा और C # के विपरीत, C ++ में "बेस क्लास" के लिए एक कीवर्ड नहीं है ( super
या base
) चूंकि C ++ मल्टीपल इनहेरिटेंस का समर्थन करता है जिससे अस्पष्टता हो सकती है।
class left {
public:
void foo();
};
class right {
public:
void foo();
};
class bottom : public left, public right {
public:
void foo()
{
//base::foo();// ambiguous
left::foo();
right::foo();
// and when foo() is not called for 'this':
bottom b;
b.left::foo(); // calls b.foo() from 'left'
b.right::foo(); // call b.foo() from 'right'
}
};
संयोग से, आप सीधे एक ही कक्षा से दो बार प्राप्त नहीं कर सकते क्योंकि आधार कक्षाओं में से एक को दूसरे पर संदर्भित करने का कोई तरीका नहीं होगा।
class bottom : public left, public left { // Illegal
};