वर्ग डिफ़ॉल्ट निर्माता प्रदान नहीं के लिए आभासी विरासत के लिए संभव है?डिफ़ॉल्ट निर्माता और आभासी विरासत
वर्तमान हीरा आरेख (कोई डिफ़ॉल्ट निर्माता का केवल परिवर्तन के साथ सरल एक प्रदान की गई) (छ ++ 4.4.3) संकलन नहीं है।
class A {
public:
A(int) {}
};
class B : virtual public A {
public:
B(int i) : A(i) {}
};
class C : virtual public A {
public:
C(int i) : A(i) {}
};
class D : public B, public C {
public:
D(int i) : B(i), C(i) {}
};
धन्यवाद, फ्रांसेस्को
डी ए से अनजान है, ज़ाहिर है, वांछनीय छोड़कर। दुर्भाग्यवश, 'init()' समाधान में कमी आई है: ए के कन्स्ट्रक्टर को दो बार (बी और सी द्वारा प्रत्येक बार) कहा जाएगा, जिसके दुष्प्रभाव हो सकते हैं (विशेष रूप से यदि स्थिर सदस्य उपयोग किए जाते हैं)। साथ ही, यदि कोई डेवलपर 'कक्षा डी: सार्वजनिक ए {} 'बनाता है, तो' init() 'विधि को बिल्कुल भी नहीं कहा जा सकता है, वस्तु को एक प्रारंभिक स्थिति में छोड़कर। – Marste