2010-10-31 28 views
6

मैं एक आधार वर्ग है कहो । मेरे द्वारा इसे कैसे रोका जा सकता है?व्युत्पन्न वर्ग से कॉल नहीं आधार वर्ग निर्माता

+1

आप नहीं करते; यह समझ में नहीं आता है। आपको ऐसा क्यों लगता है कि आपको ऐसा करने की ज़रूरत है? – GManNickG

+0

@GMan मेरे पास एक बेस क्लास है जहां डेटा निर्माता के शीर्षलेख के साथ तैयार किया गया है। व्युत्पन्न वर्ग को हेडर तैयार करने की आवश्यकता नहीं है, लेकिन यह बेस क्लास कन्स्ट्रक्टर को कॉल कर रहा है जो हेडर तैयार कर रहा है और कुछ चीजों को गड़बड़ कर रहा है। – Brad

+3

आप विरासत का बिंदु खो रहे हैं। विरासत एक "ए ए एक बी" संबंध बनाता है। यदि कोई बी ऐसी चीजें करता है जो ए को नहीं करना चाहिए, तो ए ए बी नहीं है –

उत्तर

3

एक बेस क्लास इंस्टेंस किसी भी व्युत्पन्न क्लास इंस्टेंस का एक अभिन्न हिस्सा है। यदि आप सफलतापूर्वक व्युत्पन्न क्लास इंस्टेंस का निर्माण करते हैं तो आपको परिभाषा के अनुसार - सभी बेस क्लास और सदस्य ऑब्जेक्ट्स का निर्माण करना अन्यथा व्युत्पन्न ऑब्जेक्ट का निर्माण विफल हो गया होगा। बेस क्लास इंस्टेंस का निर्माण करने में इसके रचनाकारों में से एक को कॉल करना शामिल है।

यह मौलिक है कि सी ++ में विरासत कैसे काम करती है।

11

अतिरिक्त खाली सीटीओआर बनाएं।

struct noprapere_tag {}; 

class baseClass 
{ 
public: 
    baseClass() : x (5), y(6) { }; 

    baseClass(noprapere_tag) { }; // nothing to do 

protected: 
    int x; 
    int y; 

}; 

class derClass : public baseClass 
{ 
public: 
    derClass() : baseClass (noprapere_tag) { }; 

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