এই বিভাগে আমরা 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 এর একটি পয়েন্টার, প্রতি অবজেক্ট ইনস্ট্যান্স রক্ষণাবেক্ষণ করা হয়।