class A {
int i;
public:
A() {cout<<"in A's def const\n";};
A(int k) {cout<<"In A const\n"; i = k; }
};
class B : virtual public A {
public:
B(){cout<<"in B's def const\n";};
B(int i) : A(i) {cout<<"in B const\n";}
};
class C : public B {
public:
C() {cout<<"in C def cstr\n";}
C(int i) : B(i) {cout<<"in C const\n";}
};
int main()
{
C c(2);
return 0;
}
इस मामले में उत्पादनआदेश
in A's def const
in B const
in C const
क्यों इस in A const
में प्रवेश नहीं है `यह 1 आर्ग निर्माता कॉल के आदेश का पालन करना चाहिए। लेकिन वर्चुअल कीवर्ड का उपयोग करके बी से ए प्राप्त करने पर वास्तव में क्या हो रहा है।
वहाँ कुछ और सवाल
हैं यहां तक कि अगर मैं उपरोक्त कार्यक्रम में आभासी कीवर्ड निकालकर सभी डिफ़ॉल्ट निर्माता यह त्रुटि देता है हटा दें। तो, इसे डिफ कंस्ट्रक्टर
@james .... आप का कहना है कि सबसे व्युत्पन्न कक्षा यानी सी को ए के लिए प्रारंभकर्ता निर्दिष्ट करना चाहिए, लेकिन एक डिफ़ॉल्ट कन्स्ट्रक्टर को हटाने और सी (int i) जोड़ने पर: ए (i), बी (i) सी निर्माता में यह – Kunal
@MikeDeSimone काम does not ... फिर मैं एक ही लिखा है लेकिन एक के डिफ़ॉल्ट निर्माता हटा दिया, लेकिन मैं संकलन त्रुटि मिलती है ... क्या आप कृपया कर सकते हैं समझाने क्यों इस so..and है कैसे करता है, तो देखभाल करने के लिए मैं इसमें एक जटिल विरासत शामिल है। – Kunal
@ कुनल: हाँ, मैंने अपनी टिप्पणी हटा दी क्योंकि आपने वास्तव में इसे आजमाया था। तो यहां हमारे पास एक जवाब है, वोट दिया गया है, जो काम करने में विफल रहता है। @ जेम्स, कृपया कोड को ठीक करने का तरीका बताएं ताकि 'ए (int)' कन्स्ट्रक्टर को कॉल किया जा सके। –