2012-04-16 13 views
5

पर विचार करें एक वर्ग वाल्डो, कि फू और बाज, अर्थात .:क्या यह काम करता है? सी ++ एकाधिक वंशानुक्रम और निर्माता चेनिंग

class Waldo : public Foo, public Baz { 
    ... 
}; 

जब मैं वाल्डो का एक नया उदाहरण बनाने से विरासत:

Waldo *w = new Waldo; 

करना फू और बाज़ रचनाकारों को बुलाया जाता है? यदि उन्हें डिफ़ॉल्ट रूप से नहीं कहा जाता है, तो क्या क्लास घोषणा में या वाल्डो कन्स्ट्रक्टर के अस्वीकरण/परिभाषा में उन्हें कॉल करने के लिए मजबूर करने का कोई आसान तरीका है?

(ऐसा लगता है कि मैं निर्माता श्रृंखलन करने के लिए प्रयास कर रहा है, और सी ++ कथित तौर पर ऐसा नहीं है। मुझे यकीन है कि नहीं कर रहा हूँ।)

मैं क्या करने की कोशिश कर रहा हूँ "व्याख्या" विभिन्न वर्ग है घोषणाएं, जहां टिप्पणियां (अन्य चीजों के साथ) एनोटेटेड क्लास के उदाहरणों को एनोटेशन कक्षाओं द्वारा बनाए गए सूचियों में जोड़ा जाना चाहिए। यह मुझे उदाहरण देता है, उदाहरण के लिए, बाज़ प्रकृति के साथ सभी वस्तुओं की सूची चलाएं, उन्हें एक निश्चित ऑपरेशन लागू करें, और इस बारे में चिंता न करें कि मुझे बाज़ प्रकृति के साथ वस्तुओं की सूची में उदाहरण जोड़ने के लिए याद किया गया है, क्योंकि रचनाकार ने इसे स्वचालित रूप से किया।

+1

नोट: यहां 'new' के उपयोग नकली है, तो आप पूरी तरह से कह सकते हैं' वाल्डो डब्ल्यू; 'और का एक उदाहरण 'वाल्डो' बनाया जाएगा। –

उत्तर

1

कक्षा के सभी सदस्यों के रचनाकारों को कक्षा में घोषित क्रम में बुलाया जाता है।

व्युत्पन्न कक्षाओं के डिफ़ॉल्ट निर्माता डिफ़ॉल्ट रूप से बेस क्लास के रचनाकार कहते हैं। वे तर्क की जरूरत है, वे इसे एक त्रुटि है स्पष्ट रूप से किसी और लागू किया जा करने की जरूरत है ...

class Employee { 
private: 
    // 
public: 
    Employee(); 
    //... 
}; 



class Manager: public Employee { 
private: 
    short level; 
public: 
    Manager(): Employee(), level() {} // This is the default constructor, it calls Employee(). 
    // The definition is equivalent to default constructor of Manager.. 
    //... 
    }; 
+0

अच्छा, विस्तृत उत्तर और स्पष्टीकरण। धन्यवाद! –

7

हां, उन्हें बुलाया जाता है। बाएं से दाएं।