ठीक है तो मेरे पास स्थिति की स्थापना है:
क्लास ए () {method () ; } कक्षा बी: पब्लिक क्लास () {ओवरराइड विधि (); } मुझे इस वर्गीकरण का एक अन्य वर्ग पर जाना है:
सूची & lt; वर्ग ए & gt; सदस्य; AddMethod (ClassA newMember) {members.push_back (newMember); } अपडेट () {for (std :: list & lt; Classa & gt; :: iterator list_iter = members.begin (); list_iter! = Members.end (); list_iter ++) {classa tklb = * list_iter; tklb.method (); } वापसी 0; } यह बात यह है कि जब मैं tklb.method () कर रहा हूँ तो मैं बाल क्लास से कॉल करना चाहता हूं लेकिन वह हमेशा मूल वर्ग से कॉल करता है क्योंकि यह एक सूची है मुझे इसकी आवश्यकता है क्योंकि मेरे पास अन्य वर्ग हैं जो कक्षा ए के बच्चे हैं और अलग तरीके से 'विधि' करेंगे।
आपको पॉइन्टर का उपयोग करने के लिए आइटम को पॉलीमॉर्फिक रूप से व्यवहार करने की आवश्यकता है आप इस समय खतरे में हैं क्योंकि एक प्रतिलिपि कन्स्ट्रक्टर के माध्यम से एक वस्तु को सूची में रखा जा सकता है।
जैसा कि आप वर्णन करते हैं, इसके लिए एक विधि के अलावा () आपको विधि घोषित करने के लिए < कोड> आभासी । (मुझे लगता है कि वापसी प्रकार की कमी एक टाइपो है?)।
एक std :: list & lt; ClassA * & gt; (या बेहतर अभी तक उपयुक्त स्मार्ट पॉइंटर) में बदलें।
No comments:
Post a Comment