ভার্চুয়াল ফাংশন হলো একটি ফাংশন যা প্যারেন্ট ক্লাসে ডিফাইন করা হয় এবং এটি ডেরাইভড ক্লাসে ওভাররাইড করা যেতে পারে। ভার্চুয়াল ফাংশন ব্যবহার করে, আমরা রানটাইম পলিমরফিজম অর্জন করতে পারি। এর মাধ্যমে একই ফাংশন বিভিন্ন ডেরাইভড ক্লাসে ভিন্নভাবে কাজ করতে পারে।
কিভাবে কাজ করে:
ভার্চুয়াল ফাংশন প্যারেন্ট ক্লাসে `virtual` কিওয়ার্ড ব্যবহার করে ডিফাইন করা হয়। যখন এই ফাংশনটি ডেরাইভড ক্লাসে ওভাররাইড করা হয়, তখন রানটাইমে সঠিক ফাংশনটি নির্বাচন করা হয়।
উদাহরণ:
#include
using namespace std;
class Animal {
public:
virtual void sound() { // ভার্চুয়াল ফাংশন
cout << "Animal sound" << endl;
}
};
class Dog : public Animal {
public:
void sound() override { // ওভাররাইড করা
cout << "Bark" << endl;
}
};
class Cat : public Animal {
public:
void sound() override { // ওভাররাইড করা
cout << "Meow" << endl;
}
};
int main() {
Animal* animal1 = new Dog(); // Animal pointer to Dog object
Animal* animal2 = new Cat(); // Animal pointer to Cat object
animal1->sound(); // Outputs "Bark"
animal2->sound(); // Outputs "Meow"
delete animal1;
delete animal2;
return 0;
}
এখানে, `sound()` ফাংশনটি `Animal` ক্লাসে ভার্চুয়াল হিসেবে ডিফাইন করা হয়েছে। তারপর `Dog` এবং `Cat` ক্লাসে এই ফাংশনটি ওভাররাইড করা হয়েছে। যখন `Animal` পয়েন্টার ব্যবহার করে `Dog` বা `Cat` ক্লাসের অবজেক্ট কল করা হয়, তখন সঠিক ফাংশনটি কল হয় (যেমন, "Bark" অথবা "Meow")।
ভার্চুয়াল ফাংশনের উপকারিতা:
-
রানটাইম পলিমরফিজম অর্জন করা যায়।
-
একই ফাংশন একাধিক ক্লাসে ভিন্নভাবে কাজ করতে পারে।
-
একই প্যারেন্ট পয়েন্টার দ্বারা বিভিন্ন ডেরাইভড ক্লাসের অবজেক্টের ফাংশন অ্যাক্সেস করা যায়।