क्या वर्चुअल फ़ंक्शन के लिए परिभाषा आवश्यक है?क्या वर्चुअल फ़ंक्शन अनिवार्य रूप से परिभाषा है?
पर विचार करें नीचे इस नमूने कार्यक्रम:
#include <iostream>
using namespace std;
class base
{
public:
void virtual virtualfunc();
};
class derived : public base
{
public:
void virtualfunc()
{
cout << "vf in derived class\n";
}
};
int main()
{
derived d;
return 0;
}
यह लिंक-त्रुटि देता है:
In function
base::base()
:: undefined reference tovtable for base
मैं आधार वर्ग में आभासी समारोह के लिए परिभाषा नहीं है। यह त्रुटि क्यों हो रही है भले ही मैंने वर्चुअल फ़ंक्शन को स्पष्ट रूप से लागू नहीं किया है?
दिलचस्प बात जो मुझे मिलती है वह यह है कि यदि मैं कक्षा derived
की किसी ऑब्जेक्ट को तुरंत चालू नहीं करता हूं, तो लिंक त्रुटि अब नहीं है। ऐसा क्यों है? उपरोक्त लिंक त्रुटि के साथ तत्काल क्या किया गया है?
अपना संपादन पुन: यदि आप 'व्युत्पन्न' या 'आधार' को तत्काल नहीं करते हैं, तो लिंकर को उन दो वर्गों से किसी भी विधि के साथ कुछ भी क्यों करना होगा? यदि कक्षाओं का संदर्भ नहीं दिया जाता है, तो लिंकर के पास ऑब्जेक्ट फ़ाइलों में उन्हें देखने की कोशिश करने का कोई कारण नहीं है। (जब तक आप एक पुस्तकालय नहीं बना रहे हैं।) – Mat
@Mat: मैं सहमत हूं :) –