2011-08-16 11 views
5

यहाँ http://www.parashift.com/c++-faq-lite/multiple-inheritance.html अनुभाग [25.14] कहते हैंविरासत पदानुक्रम: निर्माता और नाशक निष्पादन अनुक्रम

बहुत पहले कंस्ट्रक्टर्स निष्पादित करने के लिए पदानुक्रम में कहीं भी आभासी आधार वर्ग हैं।

मैं निम्नलिखित प्रोग्राम का उपयोग यह सत्यापित करने का प्रयास:

  A (pure virtual) 
      | 
      B 
      | 
      C 
(virtual)/ \ (virtual) 
     E  D 
     \ /
      F 
      | 
      G (pure virtual) 
      | 
      H 

प्रत्येक वर्ग के एक c'tor और आभासी डी 'टो है। आउटपुट निम्नानुसार है:

A 
B 
C 
E 
D 
F 
G 
H 
~H 
~G 
~F 
~D 
~E 
~C 
~B 
~A 
Press any key to continue . . . 

लेकिन उद्धरण वर्चुअल बेस क्लास कन्स्ट्रक्टर के अनुसार पहले निष्पादित किया जाना चाहिए।

मैंने क्या गलत किया?

संपादित करें: मेरे प्रश्न को साफ़ करने के लिए, मेरी समझ के अनुसार इस व्यवहार के साथ कुछ भी नहीं है कि बेस क्लास आभासी है या नहीं। लेकिन उद्धरण वर्चुअल बेस क्लास पर जोर देता है। क्या मैं स्पष्ट हूं या वहां कुछ ख़राब हूँ?

धन्यवाद।

+0

कृपया उस कोड को आपूर्ति करें जिसका उपयोग आप अधिक सटीक उत्तरों के लिए कर रहे थे। – amit

+0

@amit, यहां कोड के लिए कोई आवश्यकता नहीं है। इस व्यवहार की उम्मीद है ... – eran

उत्तर

3

वर्चुअल बेस क्लासेस का निर्माण नहीं किया जा सकता है यदि वे जिन वर्गों से उत्तराधिकारी हैं वे पहले नहीं बनाए जाते हैं। तो आपके मामले में, गैर वर्चुअल बेस क्लास का निर्माण किया जाता है क्योंकि आभासी लोग उन पर निर्भर करते हैं: C का निर्माण A और B तक नहीं किया जा सकता है। इसलिए, A और B वास्तव में C से पहले बनाए गए हैं, भले ही C वस्तुतः विरासत में मिला है।

+1

यह किसी भी scenerio में है। इस वाक्यांश को पदानुक्रम में कहीं भी क्यों जोड़ा गया है? – Azodious

+1

@Azodious, सी ++ एफएक्यू शानदार है, लेकिन मुझे लगता है कि इस मामले में आगे की व्याख्या की कमी वास्तव में कुछ भ्रामक हो सकती है। वर्चुअल बेस क्लासेस पहले कहीं भी बनाए जाते हैं, लेकिन उन्हें बनाने में किसी भी परिदृश्य में, उनके आधार बनाना शामिल है। काम करने के लिए इसका कोई और तरीका नहीं है, क्योंकि कक्षाओं को प्रारंभिक आधार पर अपने आधार पर भरोसा करने में सक्षम होना चाहिए। – eran

+0

ठीक है ... जो इसे साफ़ करता है। धन्यवाद। – Azodious

संबंधित मुद्दे