কম্পিউটার

C++ এ একটি নন-ভার্চুয়াল ফাংশনের ভিতরে একটি ভার্চুয়াল ফাংশন কল করলে কী হয়


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


  1. কিভাবে C++ এ কনস্ট্রাক্টরের ভিতরে একটি ভার্চুয়াল ফাংশন কল করবেন?

  2. কখন C++ এ ভার্চুয়াল ডেস্ট্রাক্টর ব্যবহার করবেন?

  3. C++ এ তীর অপারেটর কি?

  4. C++ এ ডট অপারেটর কি?