मैं के रूप में प्रदर्शित करने के लिए कैसे एक शुद्ध आभासी समारोह कहा जा सकता है this answer में उदाहरण के लिए "मरम्मत" की कोशिश की।यह शुद्ध वर्चुअल फ़ंक्शन का कॉल क्यों नहीं है?
#include <iostream>
using namespace std;
class A
{
int id;
public:
A(int i): id(i) {}
int callFoo() { return foo(); }
virtual int foo() = 0;
};
class B: public A
{
public:
B(): A(callFoo()) {}
int foo() { return 3; }
};
int main() {
B b; // <-- this should call a pure virtual function
cout << b.callFoo() << endl;
return 0;
}
लेकिन मुझे कोई रनटाइम त्रुटि here (with C++ 4.9.2) मिलता है, लेकिन उत्पादन 3. मैं बोर्लेन्ड सी ++ 5.6.4 के साथ एक ही करने की कोशिश की है, लेकिन वहाँ मैं एक पहुँच उल्लंघन हो रही है। मुझे लगता है कि foo()
बेस क्लास के निर्माता के कॉल में शुद्ध वर्चुअल होना चाहिए।
कौन गलत है? क्या मुझे और कंपाइलर्स आज़माएं? क्या मैं आभासी कार्यों की मेरी समझ में सही हूं?
मैं बोर्लेन्ड सी ++ के साथ एक परीक्षण के परिणामों का प्रयोग नहीं होता है, तो कोड का एक टुकड़ा वैध और/या मानक के अनुरूप है देखने के लिए;) – CoryKramer
@CoryKramer आभासी कार्यों अब दशकों के लिए उपयोग में हैं। – Wolf
मुझे इसके बारे में पता है, मैं अभी भी बोर्लैंड आईडीई – CoryKramer