मेरे पास वर्चुअल फ़ंक्शन के साथ एक बेस क्लास है और मैं उस फ़ंक्शन को एक व्युत्पन्न वर्ग में ओवरराइड करना चाहता हूं। क्या संकलक जांच करने का कोई तरीका है यदि मैं व्युत्पन्न वर्ग में घोषित फ़ंक्शन वास्तव में बेस क्लास में एक फ़ंक्शन को ओवरराइड करता है? मैं कुछ मैक्रो या कुछ जोड़ना चाहता हूं जो यह सुनिश्चित करता है कि मैंने पुराने को ओवरराइड करने के बजाय गलती से एक नया फ़ंक्शन घोषित नहीं किया।
इस उदाहरण को लें:
class parent {
public:
virtual void handle_event(int something) const {
// boring default code
}
};
class child : public parent {
public:
virtual void handle_event(int something) {
// new exciting code
}
};
int main() {
parent *p = new child();
p->handle_event(1);
}
यहां parent::handle_event()
इसके बजाय कहा जाता है child::handle_event()
, क्योंकि बच्चे की विधि const
घोषणा को याद करती है और इसलिए एक नई विधि घोषित करती है। यह फ़ंक्शन नाम या पैरामीटर प्रकारों में कुछ मामूली अंतर का एक टाइपो भी हो सकता है। यह आसानी से भी हो सकता है अगर बेस क्लास का इंटरफ़ेस बदल जाए और कहीं न कहीं कुछ व्युत्पन्न वर्ग इस बदलाव को प्रतिबिंबित करने के लिए अपडेट नहीं किया गया।
क्या इस समस्या से बचने का कोई तरीका है, क्या मैं किसी तरह कंपाइलर या किसी अन्य उपकरण को यह बता सकता हूँ कि यह मेरे लिए है? किसी भी सहायक संकलक झंडे (अधिमानतः जी ++ के लिए)? आप इन समस्याओं से कैसे बचेंगे?