কম্পিউটার

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


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

কারণ হল C++-এ সুপার-ক্লাসগুলি প্রাপ্ত ক্লাসের আগে তৈরি করা হয়। সুতরাং, নিম্নোক্ত উদাহরণে, যেমন D তাৎক্ষণিক হওয়ার আগে B-কে অবশ্যই ইনস্ট্যান্টিয়েট করতে হবে। যখন B-এর কনস্ট্রাক্টরকে বলা হয়, তখন এটি এখনও D নয়, তাই ভার্চুয়াল ফাংশন টেবিলে এখনও B-এর s() কপির জন্য এন্ট্রি রয়েছে।

উদাহরণ কোড

#include<iostream>
using namespace std;
class B {
   public: B() {
      s();
   }
   virtual void s() {
      cout << "Base" << endl;
   }
};

class D: public B {
   public: D() : B() {}
   virtual void s() {
      cout << "Derived" <<endl;
   }
};

int main() {
   D de;
}

আউটপুট

Base

  1. C++ এ ইনলাইন ফাংশন

  2. C++ এ ডিফল্ট কনস্ট্রাক্টর

  3. C++ এ কনস্ট্রাক্টর

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