class base {
public:
void virtual fn(int i) {
cout << "base" << endl;
}
};
class der : public base{
public:
void fn(char i) {
cout << "der" << endl;
}
};
int main() {
base* p = new der;
char i = 5;
p->fn(i);
cout << sizeof(base);
return 0;
}
यहाँ समारोह fn base
वर्ग में परिभाषित के हस्ताक्षर समारोह fn()
der
वर्ग में परिभाषित किया गया है, हालांकि समारोह नाम एक ही है के हस्ताक्षर से अलग है। इसलिए, समारोह der
वर्ग में परिभाषित खाल base
वर्ग समारोह fn()
। इसलिए der
एफएन के संस्करण को p->fn(i)
कॉल द्वारा कॉल नहीं किया जा सकता है; बस ठीक है।व्युत्पन्न वर्ग वर्चुअल फ़ंक्शन को ओवरराइड नहीं करते समय Vptr क्यों आवश्यक है?
मेरे बिंदु तो यही कारण है कि sizeof
वर्ग base
या der
4
है अगर वहाँ vtable सूचक का कोई उपयोग नहीं है? VTABLE सूचक की आवश्यकता क्या है?
क्या आपने कभी सी ++ में ओवरलोडिंग के बारे में सुना है? –
@KamilKlimek: ओवरलोडिंग विभिन्न हस्ताक्षरों के साथ कई कार्यों को घोषित करने का कार्य है। आप शायद क्या मतलब है ओवरराइडिंग (जो व्युत्पन्न कक्षाओं में विधियों को पुन: कार्यान्वित कर रहा है)। आपकी तरह की जानकारी के लिए –
, ये ओवरलोडेड फ़ंक्शन नहीं हैं। – user966379