কম্পিউটার

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


কনস্ট্রাক্টর বা ডেস্ট্রাক্টর থেকে ভার্চুয়াল ফাংশন কল করা বিপজ্জনক এবং যখনই সম্ভব এড়ানো উচিত৷ এর কারণ হল আপনি যে ভার্চুয়াল ফাংশনটি কল করেন সেটি বেস ক্লাস থেকে কল করা হয় এবং প্রাপ্ত ক্লাস থেকে নয়৷

C++-এ প্রতিটি ক্লাস তার নিজস্ব নির্মাণে প্রবেশ করার আগে ভার্চুয়াল পদ্ধতি টেবিলের সংস্করণ তৈরি করে। তাই কনস্ট্রাক্টরের ভার্চুয়াল পদ্ধতিতে কল করলে বেস ক্লাসের ভার্চুয়াল পদ্ধতি বলা হবে। অথবা যদি সেই স্তরে এটির কোন বাস্তবায়ন না থাকে তবে এটি একটি বিশুদ্ধ ভার্চুয়াল পদ্ধতি কল তৈরি করবে। বেস সম্পূর্ণরূপে তৈরি হয়ে গেলে, কম্পাইলার ডেরাইভড ক্লাস তৈরি করা শুরু করে এবং ডিরাইভড ক্লাসের ইমপ্লিমেন্টেশন পয়েন্ট করার জন্য মেথড পয়েন্টারগুলিকে ওভাররাইড করে। সুতরাং উদাহরণস্বরূপ, যদি আপনার কোড থাকে -

উদাহরণ

#include<iostream>
using namespace std;

class Base {
public:
   Base() { f(); }
   virtual void f() { std::cout << "Base" << std::endl; }
};
class Derived : public Base {
public:
   Derived() : Base() {}
   virtual void f() { std::cout << "Derived" << std::endl; }
};

int main() {
   Derived d;    
   return 0;
}

আউটপুট

এটি আউটপুট দেবে −

Base

  1. C++ এ একটি সমান্তরালগ্রামের ভিতরে একটি ত্রিভুজের ক্ষেত্রফল

  2. প্রধান ফাংশন নিজেকে C++ এ কল করতে পারে?

  3. কিভাবে C++ এ প্রাপ্ত ক্লাস ফাংশন থেকে একটি প্যারেন্ট ক্লাস ফাংশন কল করবেন?

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