ফাংশন ওভাররাইডিং C++-এর সবচেয়ে সাধারণ ফিচার। মূলত ফাংশন ওভাররাইডিং মানে বেস ক্লাসে থাকা একটি ফাংশনকে রি-ডিফাইন করা, যা ডিরাইভড ক্লাসেও ডিফাইন করা থাকে। তাই ফাংশন সিগনেচার একই থাকে কিন্তু বিহেবিয়র ভিন্ন হবে।
কিন্তু এমন পরিস্থিতি হতে পারে যখন একজন প্রোগ্রামার সেটি ওভাররাইড করার সময় ভুল করে। যেমন সিগনেচার একই না হলে, সেটি অন্য একটি ফাংশন হিসেবে বিবেচিত হবে, কিন্তু ওভাররাইডেড মেথড না হবে। সেক্ষেত্রে, আমরা override কিওয়ার্ড ব্যবহার করতে পারি। এই কিওয়ার্ড 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
এই কেসে প্রোগ্রাম ঠিক কাজ করছে কারণ সিগনেচার একই। নিচের উদাহরণে, সিগনেচার ভিন্ন হবে। override কিওয়ার্ডের জন্য এটি এরর জেনারেট করবে।
উদাহরণ
#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
এই কেসে প্রোগ্রাম ঠিক কাজ করছে কারণ সিগনেচার একই। নিচের উদাহরণে, সিগনেচার ভিন্ন হবে। override কিওয়ার্ডের জন্য এটি এরর জেনারেট করবে।