c++ - What is the effect of overriding a (regular) virtual method by a pure virtual method? -


मान लें कि हमारे पास

  class A {public: virtual int foo () {cout & lt; & lt; "Foo!"; }} वर्ग बी: सार्वजनिक ए {सार्वजनिक: वर्चुअल इंट foo () = 0; } वर्ग सी: सार्वजनिक बी {सार्वजनिक: वर्चुअल इंक foo () {cout & lt; & lt; "मू!"; }}  

क्या यह वास्तव में ओवरराइड है? मुझे लगता है कि यह वास्तव में ओवरलोडिंग है

हमें एक आधार वर्ग ए मिला है। फिर हमें एक अमूर्त व्युत्पन्न वर्ग बी मिला है जो कंक्रीट वर्ग ए से प्राप्त होता है, और उसके बाद की प्राप्ति होती है सी के माध्यम से बी।

हम यहाँ क्या कर रहे हैं और यह कोई मतलब नहीं है?

< पी> ओवरलोडिंग का मतलब होगा कि आपके पास एक ही नाम के दो कार्य हैं लेकिन विभिन्न मापदंडों के साथ। यह मामला यहां नहीं है।

उदाहरण:

  int functionA () {/*...*/}; Int फ़ंक्शन ए (इंट कुछ पैरामीटर) {/*...*/};  

ओवरराइडिंग का अर्थ उप-कक्षा में समान पैरामीटर के साथ फ़ंक्शन को दोबारा लिखना है। यही वह उदाहरण है जिसे आपने एक उदाहरण के रूप में प्रस्तुत किया है।

यह परिभाषा भाग है अब डिजाइन पर:

जब आपके पास शुद्ध वर्चुअल फ़ंक्शन है, तो ठोस उपवर्गों को इसे ओवरराइड करना होगा। इसलिए एक शुद्ध वर्चुअल फ़ंक्शन जोड़कर, आप यह सुनिश्चित करते हैं कि सभी उपवर्ग फ़ंक्शन के समान सेट (= इंटरफ़ेस) प्रदान करते हैं। यह नमूना कोड में मामला लगता है

लेकिन यह एक बहुत अच्छा उदाहरण नहीं है, क्योंकि कंक्रीट सुपर क्लास पहले से ही foo () के लिए एक डिफ़ॉल्ट कार्यक्षमता लागू करता है जब कोई अमूर्त उपवर्ग है जो इसे विशुद्ध रूप से आभासी रूप से परिभाषित करता है, तो यह मेरे लिए एक संकेत है कि क्लास पदानुक्रम त्रुटिपूर्ण है क्योंकि उपवर्ग (और फ़ू () का कॉलर आमतौर पर डिफ़ॉल्ट कार्यान्वयन में वापस आना चाहिए। इस तरह के एक अमूर्त उदाहरण के साथ व्याख्या करना थोड़ा मुश्किल है, लेकिन इस तरह की पदानुक्रम मेरी आंखों से थोड़ा संदिग्ध है।


Comments