এই বিভাগে আমরা C++ এ ভার্চুয়াল ক্লাস সম্পর্কে আকর্ষণীয় তথ্য নিয়ে আলোচনা করব। আমরা প্রথমে দুটি কেস দেখব, তারপর আমরা ঘটনাটি বিশ্লেষণ করব।
-
প্রথমে কোনো ভার্চুয়াল ফাংশন ব্যবহার না করেই প্রোগ্রামটি চালান।
-
নন-ভার্চুয়াল ফাংশনের অধীনে যেকোনো ভার্চুয়াল ফাংশন ব্যবহার করে প্রোগ্রামটি চালায়।
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <iostream>
using namespace std;
class BaseClass {
public:
void display(){
cout << "Print function from the base class" << endl;
}
void call_disp(){
cout << "Calling display() from derived" << endl;
this -> display();
}
};
class DerivedClass: public BaseClass {
public:
void display() {
cout << "Print function from the derived class" << endl;
}
void call_disp() {
cout << "Calling display() from derived" << endl ;
this -> display();
}
};
int main() {
BaseClass *bp = new DerivedClass;
bp->call_disp();
} আউটপুট
Calling display() from base class Print function from the base class
আউটপুট থেকে, আমরা বুঝতে পারি যে একটি ভার্চুয়াল ফাংশন যখন একটি নন-ভার্চুয়াল ফাংশনের ভিতরে কল করা হয় তখনও পলিমরফিক আচরণ কাজ করে। কোন ফাংশনটি বলা হবে তা রানটাইমে vptr এবং vtable প্রয়োগ করার সময় নির্ধারণ করা হয়।
-
vtable − এটি ফাংশন পয়েন্টারগুলির একটি টেবিল, প্রতি শ্রেণীতে রক্ষণাবেক্ষণ করা হয়।
-
vptr − এটি vtable এর একটি পয়েন্টার, প্রতি অবজেক্ট ইনস্ট্যান্স রক্ষণাবেক্ষণ করা হয়।