फ़ंक्शन ओवरराइडिंग C++ की सबसे आम विशेषता है। मूल रूप से फ़ंक्शन ओवरराइडिंग का अर्थ है बेस क्लास में मौजूद फ़ंक्शन को फिर से परिभाषित करना, व्युत्पन्न वर्ग में भी परिभाषित किया जाना चाहिए। तो फ़ंक्शन हस्ताक्षर समान हैं लेकिन व्यवहार भिन्न होंगे।
लेकिन ऐसी स्थिति हो सकती है जब कोई प्रोग्रामर उस फंक्शन को ओवरराइड करते समय गलती कर दे। जैसे यदि हस्ताक्षर समान नहीं है, तो उसे एक अन्य फ़ंक्शन के रूप में माना जाएगा, लेकिन ओवरराइड विधि या वह नहीं। उस स्थिति में, हम ओवरराइड कीवर्ड का उपयोग कर सकते हैं। यह कीवर्ड C+ +11 में पेश किया गया है। जब कंपाइलर को इस तरह का कीवर्ड मिल जाता है, तो वह समझ सकता है कि यह उसी क्लास का ओवरराइड वर्जन है।
आइए अवधारणा को समझने के लिए उदाहरण देखें।
उदाहरण
#include <iostream> using namespace std; class BaseClass{ public: virtual void display() { cout << "Displaying from Base Class\n"; } }; class DerivedClass : public BaseClass{ public: void display() { cout << "Displaying from Derived Class\n"; } }; main() { BaseClass *b_ptr; b_ptr = new DerivedClass(); b_ptr->display(); }
आउटपुट
Displaying from Derived Class
इस मामले में कार्यक्रम ठीक काम कर रहा है क्योंकि हस्ताक्षर समान हैं। निम्नलिखित उदाहरण में, हस्ताक्षर भिन्न होंगे। ओवरराइड कीवर्ड के लिए, यह एक त्रुटि उत्पन्न करेगा।
उदाहरण
#include <iostream> using namespace std; class BaseClass{ public: virtual void display() { cout << "Displaying from Base Class\n"; } }; class DerivedClass : public BaseClass{ public: void display(int x) override{ cout << "Displaying from Derived Class\n"; } }; main() { BaseClass *b_ptr; b_ptr = new DerivedClass(); b_ptr->display(); }
आउटपुट
[Error] 'void DerivedClass::display(int)' marked override, but does not override
इस मामले में, कार्यक्रम ठीक काम कर रहा है क्योंकि हस्ताक्षर समान हैं। निम्नलिखित उदाहरण में, हस्ताक्षर भिन्न होंगे। ओवरराइड कीवर्ड के लिए, यह त्रुटि उत्पन्न करेगा।