वस्तुओं को बनाने के बारे में एक छोटा सा सवाल।विरासत में कन्स्ट्रक्टर/विनाशकों को कॉल करने का आदेश
struct A{
A(){cout << "A() C-tor" << endl;}
~A(){cout << "~A() D-tor" << endl;}
};
struct B : public A{
B(){cout << "B() C-tor" << endl;}
~B(){cout << "~B() D-tor" << endl;}
A a;
};
और मुख्य में मैं B
का एक उदाहरण बनाने के लिए::
int main(){
B b;
}
ध्यान दें कि B
A
से निकला है और यह भी प्रकार A
के एक क्षेत्र है मैं इन दो वर्गों है कहो।
मैं नियमों को समझने की कोशिश कर रहा हूं। मुझे पता है कि किसी ऑब्जेक्ट का निर्माण करते समय पहले अपने मूल कन्स्ट्रक्टर को कॉल करते हैं, और इसके विपरीत जब विनाश होता है।
इस मामले में फ़ील्ड (A a;
) के बारे में क्या? जब B
बनाया गया है, तो यह A
के निर्माता कहां से कॉल करेगा? मैंने प्रारंभिक सूची को परिभाषित नहीं किया है, क्या कोई डिफ़ॉल्ट सूची है? और यदि कोई डिफ़ॉल्ट सूची नहीं है? और विनाश के बारे में एक ही सवाल है।
आपका उदाहरण अधिक व्याख्यात्मक हो सकता है यदि विनाशक के लिए आपका संदेश कन्स्ट्रक्टर के लिए आपके संदेश से अलग है। साथ ही, उन 'std :: sort' क्या कर रहे हैं? – Tom
इसके अलावा, प्रयोग करते समय, 'बी बी' के निर्माण और विनाश की तुलना करें, 'बी * बी = नया बी(); बी हटाएं; 'और' ए * ए = नया बी(); हटाएं; '(तुलना करें कि जब आप अपने विनाशक के लिए' आभासी 'कीवर्ड का उपयोग करते हैं, यानी' वर्चुअल ~ ए() {cout << "ए डी-टोर" << endl;} ') – Tom
@ टॉम, आप हैं सही। संकलक त्रुटियों को हटा रहा है। – iammilind