কম্পিউটার টিউটোরিয়াল

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++-এ ইনলাইন ফাংশন (Inline Functions in C++)

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

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

  4. C++-এ কনস্ট্রাক্টর (Constructor)-এ ভার্চুয়াল ফাংশন কল করা