Friday 15 January 2010

c++ - Slicing and then polymorphism -


<पूर्व> #include & lt; iostream & gt; नेमस्पेस एसटीडी का उपयोग करना; नामस्थान Q20 {// बेस क्लास कक्षा बेस {// पोस्टिंग त्रुटियों को हटाने के लिए कुछ संदर्भ जोड़ें एलओएल सार्वजनिक: बेस (बेस * बी = नल) {m_b = b; } बेस * एम_ बी; वर्चुअल व्हॉइड फ़्ंंक () {cout & lt; & lt; एंडएल & lt; & lt; "बी"; अगर (एम_ बी) {m_b- & gt; फैंसी (); } और {m_b = (बेस *) 1; } वापसी; }}; // 1 वर्ग कक्षा डी 1 प्राप्त की गई: सार्वजनिक बेस {// त्रुटियों को पोस्ट करने वाले लोगों को हटाने के लिए कुछ संदर्भ जोड़ें: डी 1 (बेस * बी = नल) {m_b = b; } शून्य फ़ंक्शन (बेस * बी) {cout & lt; & lt; एंडएल & lt; & lt; "डी 1"; m_b- & gt; समारोह (); }}; // व्युत्पन्न 2 कक्षा वर्ग D2: सार्वजनिक बेस {// कुछ संदर्भों को सार्वजनिक करने के लिए पदों को हटाने के लिए कुछ संदर्भ जोड़ें: डी 2 (बेस * बी = नल) {m_b = b; } शून्य func () {cout & lt; & lt; एंडएल & lt; & lt; "डी 2"; m_b- & gt; समारोह (); }}; // व्युत्पन्न 3 कक्षा वर्ग डी 3: सार्वजनिक बेस {// कुछ संदर्भों को हटाने के लिए सार्वजनिक पदों को हटाने के लिए कुछ संदर्भ जोड़ें: डी 3 (बेस * बी = नल) {m_b = b; } शून्य func () {cout & lt; & lt; एंडएल & lt; & lt; "डी 3"; m_b- & gt; समारोह (); }}; शून्य Q20 () {बेस * obj = new D2 (नया डी 1 (नया डी 3 (नया बेस))); // उपरोक्त भ्रामक हिस्सा है, ऊपर से होने वाली कोई भी टुकड़ा है और क्या / नीचे कॉल अनुक्रम होने वाला है ... obj- & gt; func (); Cout & lt; & lt; endl; वापसी; }}; // प्रश्न पोस्ट करना कठिन है int main () {Q20 :: Q20 (); वापसी 0; }

नीचे कॉल अनुक्रम होने वाला है ... < / P>

इसे देखें:

  बेस * obj = new D2 (...); obj- & gt; समारोह ();   

खैर, डी 2 अतिभारित आभासी फंक () से आधार , इसलिए, इसे पहले कहा जाएगा <<> कोड > वर्चुअल फंक () फ़ंक्शन में डी 1 , इसलिए, बेस :: फ़्ंंक () को कॉल किया जाएगा और B प्रिंट किया जाएगा ।

  डी 1 (नया डी 3 (...))   

डी 3 ने ओवरलोड किया फ़ंक्शन है, इसलिए, D3 :: func () को कॉल किया जाएगा और डी 3 प्रिंट किया जाएगा।

  डी 3 (नया बेस)   

अंत में, बी प्रिंट किया जाएगा। इसलिए, पूर्ण आउटपुट:

  डी 2 बी डी 3 बी    

No comments:

Post a Comment