Sunday 15 July 2012

c++ - Can't assign a pointer to method from an inherited class -


मेरे पास यह दो वर्ग है:

  वर्ग IBaseA {public: virtual bool say hello (std :: स्ट्रिंग & amp;) = 0; ~ IBaseA () {}}; कक्षा बेसए: सार्वजनिक आईबीसाए {सार्वजनिक: वर्चुअल बूल कहना हैलो (स्टडी :: स्ट्रिंग एंड स्ट्रॉ) {std :: cout & lt; & lt; "नमस्ते" & lt; & lt; Str & lt; & lt; std :: endl; वापसी (सच); } बेसए () {}};   

क्या आप मुझे समझा सकते हैं कि मैं ऐसा क्यों नहीं कर पा रहा हूं

  bool (IBaseA :: * ptr) (std :: string & amp; ) = & Amp; बेसए :: कहना हेलो; 'Bool (BaseA :: ) (std :: string & amp;) {aka bool (BaseA :: ) को परिवर्तित नहीं किया जा सकता है (std:   

: मूल_स्ट्रिंग & amp;;} 'से' बूल (आईबीसाए :: ) (स्टडी :: स्ट्रिंग & amp;) {उर्फ बूल (आईबीसाए :: ) (प्रारंभिक संस्करण में

मुझे समझ में नहीं आ रहा है कि मैं ऐसा क्यों नहीं कर सकता।

लेकिन अगर मैं

  bool (IBaseA) को असाइनमेंट बदलता हूं :: * ptr) (std :: स्ट्रिंग & amp;) = & amp; IBaseA :: sayHello;   

तब मैं बिना किसी समस्या के इस सूचक का उपयोग कर सकता हूँ

  BaseA A; (ए * ptr) (एसटीआर);   

संपादित करें: जवाब के लिए धन्यवाद, मैं सोच रहा था कि सभी पते वीटेल में हैं, वे वही स्थान हैं जो मुझे विकिपीडिया से समझा गया था।

सूचक-से-सदस्य रूपांतरण सामान्य पॉइंटर रूपांतरण के विपरीत कार्य करते हैं। आप एक संकेतक को व्युत्पन्न कक्षा में एक सूचक को आधार वर्ग में परिवर्तित कर सकते हैं, लेकिन इसके विपरीत नहीं। आप आधार वर्ग के सूचक-से-सदस्य को व्युत्पन्न वर्ग के पॉइंटर-टू-सदस्य को बदल सकते हैं, लेकिन इसके विपरीत नहीं।

हमेशा सोचें कि क्या रूपांतरण मान्य है।

सादा संकेत: बेसए के सभी उदाहरण IBaseA के उदाहरण हैं, ताकि रूपांतरण कानूनी हो। सभी IBaseA उदाहरण हैं BaseA उदाहरण, ताकि आप अन्य तरीके से परिवर्तित नहीं कर सकें।

संकेतक से सदस्य: IBaseA भी बेसए में मौजूद है, ताकि आप IBaseA के एक सूचक-से-सदस्य को BaseA के एक सूचक-से-सदस्य में परिवर्तित कर सकते हैं बेसए के सभी सदस्य IBaseA में मौजूद नहीं हैं, हालांकि, रूपांतरण दूसरे तरीके से संभव नहीं है।

No comments:

Post a Comment