C++-এ ভার্চুয়াল ফাংশনগুলি প্রাপ্ত ক্লাস অবজেক্টের প্রকার না জেনেও যেকোনও প্রাপ্ত ক্লাসের বেস ক্লাস পয়েন্টার এবং কল পদ্ধতিগুলির একটি তালিকা তৈরি করতে ব্যবহার করে। ভার্চুয়াল ফাংশন রানটাইমে দেরিতে সমাধান করা হয়।
ভার্চুয়াল ফাংশনের প্রধান ব্যবহার হল রানটাইম পলিমরফিজম অর্জন করা। কোডের দক্ষতা বাড়াতে ইনলাইন ফাংশন ব্যবহার করা হয়। ইনলাইন ফাংশনের কোড কম্পাইলের সময় ইনলাইন ফাংশন কলের পয়েন্টে প্রতিস্থাপিত হয়, যখনই ইনলাইন ফাংশন কল করা হয়।
যখনই একটি ভার্চুয়াল ফাংশনকে বেস ক্লাস রেফারেন্স বা পয়েন্টার ব্যবহার করে কল করা হয় তখন এটি ইনলাইন করা যায় না, কিন্তু যখনই সেই ক্লাসের রেফারেন্স বা পয়েন্টার ছাড়া অবজেক্ট ব্যবহার করে কল করা হয়, তখন ইনলাইন করা যেতে পারে কারণ কম্পাইলার কম্পাইলের সময় অবজেক্টের সঠিক ক্লাস জানেন। পি>
উদাহরণ কোড
#include<iostream> using namespace std; class B { public: virtual void s() { cout<<" In Base \n"; } }; class D: public B { public: void s() { cout<<"In Derived \n"; } }; int main(void) { B b; D d; // An object of class D B *bptr = &d;// A pointer of type B* pointing to d b.s();//Can be inlined as s() is called through object of class bptr->s();// prints"D::s() called" //cannot be inlined, as virtualfunction is called through pointer. return 0; }
আউটপুট
In Base In Derived