कोड ब्रूस एकलेल से, सी ++ में सोच रहा है
वर्ग एक {int i; सार्वजनिक: ए (इंट ii): i (ii) {} ~ ए () {} void f () const {}}; वर्ग बी {int i; सार्वजनिक: बी (इंट ii): i (ii) {} ~ बी () {शून्य एफ () कॉन्स्ट {}}; वर्ग सी: सार्वजनिक बी {ए ए; सार्वजनिक: सी (इंट II): बी (ii), ए (ii) {} ~ सी () {} // कॉल ~ ए () और ~ बी () शून्य एफ () कॉन्स्ट {// रेडिफ़िनिशन a.f (); बी :: च (); }}; इंट मुख्य () {सी सी (47); } इस कोड के लिए वह कहता है,
फ़ंक्शन C :: f () B: f () redefines, जो इसे संभालते हैं, और भी बेस-क्लास संस्करण कॉल करता है इसके अलावा, यह a.f () कॉल करता है ध्यान दें कि फ्यूचर के पुनर्परिवर्तन के बारे में आप केवल समय के बारे में बात कर सकते हैं; एक सदस्य वस्तु के साथ आप केवल ऑब्जेक्ट के सार्वजनिक इंटरफ़ेस को हेरफेर कर सकते हैं, इसे फिर से परिभाषित नहीं कर सकते।
उसका क्या अर्थ है?
फ़ंक्शन C :: f () केवल स्कोप रेज़ोल्यूशन ऑपरेटर के माध्यम से f () का B कॉल कर रहा है। ऐसा इसलिए है क्योंकि यह विरासत में मिला है और एक नाम के साथ एक समारोह भी C में मौजूद है। ए का फ़ंक्शन f () वर्ग C में निर्धारित वस्तु के माध्यम से कहा जाता है।
तो, जहां फ़ंक्शन का कोड redefinition है f () जैसा कि एक्सेल कहता है?
क्योंकि वर्ग C से B से प्राप्त होता है, फ़ंक्शन C :: f < / कोड> फ़ोरम को ओवरराइड करता है B :: f () अपने स्वयं के संस्करण को परिभाषित करके यदि आप किसी वस्तु का घोषित घोषित करते हैं तो C और उसका f () फ़ंक्शन कॉल करें, यह निष्पादित करेगा C :: f () जो पूरी तरह से हो सकता है B :: f () से स्वतंत्र। इसलिए बेस-क्लास फ़ंक्शन को पुनर्परिभाषित किया गया है।
ध्यान दें कि कक्षा सी में एक प्रकार का सदस्य भी होता है ए , जिसमें भी फ़ंक्शन होता है एफ () , और वह सी का कार्यान्वयन f () कॉल करने के लिए होता है af () । इसलिए C एक अलग इंटरफ़ेस के साथ अपना स्वयं का f () प्रदान कर सकता है, लेकिन यह परिवर्तन A नहीं कर सकता का कार्यान्वयन।
No comments:
Post a Comment