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