নিম্নলিখিত টেবিলটি ভার্চুয়াল এবং বিশুদ্ধ ভার্চুয়াল ফাংশনের মধ্যে পার্থক্য দেখায়:
| ভার্চুয়াল ফাংশন | বিশুদ্ধ ভার্চুয়াল ফাংশন |
|---|---|
| ভার্চুয়াল ফাংশনের ক্লাসে তাদের সংজ্ঞা রয়েছে। | বিশুদ্ধ ভার্চুয়াল ফাংশনের কোন সংজ্ঞা নেই৷ |
| ঘোষণা:ভার্চুয়াল ফাংশন_নাম(প্যারামিটার_লিস্ট) {। . . . .}; | ঘোষণা:ভার্চুয়াল funct_name(parameter_list)=0; |
| এতে প্রাপ্ত শ্রেণীর কোন ধারণা নেই। | যদি একটি ক্লাসে অন্তত একটি বিশুদ্ধ ভার্চুয়াল ফাংশন থাকে, তাহলে এটিকে বিমূর্ত ঘোষণা করা হয়। |
| প্রয়োজন হলে, বেস ক্লাস একটি ভার্চুয়াল ফাংশন ওভাররাইড করতে পারে৷ | বিশুদ্ধ ভার্চুয়াল ফাংশনের ক্ষেত্রে প্রাপ্ত ক্লাসকে অবশ্যই বিশুদ্ধ ভার্চুয়াল ফাংশনকে ওভাররাইড করতে হবে। |
ভার্চুয়াল ফাংশন
উদাহরণ কোড
#include <iostream>
using namespace std;
class B {
public:
virtual void s() //virtual function {
cout<<" In Base \n";
}
};
class D: public B {
public:
void s() {
cout<<"In Derived \n";
}
};
int main(void) {
D d; // An object of class D
B *b= &d;// A pointer of type B* pointing to d
b->s();// prints"D::s() called"
return 0;
} আউটপুট
In Derived
বিশুদ্ধ ভার্চুয়াল ফাংশন
উদাহরণ কোড
#include<iostream>
using namespace std;
class B {
public:
virtual void s() = 0; // Pure Virtual Function
};
class D:public B {
public:
void s() {
cout << " Virtual Function in Derived class\n";
}
};
int main() {
B *b;
D dobj; // An object of class D
b = &dobj;// A pointer of type B* pointing to dobj
b->s();// prints"D::s() called"
} আউটপুট
Virtual Function in Derived class