c++ - Base class pointer conversion -
पॉइंटर रूपांतरण को देखने के लिए मैंने निम्न कोड लिखा है:
#include & lt; iostream & gt; # शामिल करें & lt; cstdlib & gt; Std :: cout का उपयोग कर; Std :: endl का उपयोग कर; कक्षा एक {दोस्त वर्ग बी; }; वर्ग बी: निजी ए {}; Int main () {B * b = नया बी; ए * ए = बी; Cout & lt; & lt; बी एंड एलटी; & lt; endl; Cout & lt; & lt; ए; }
धारा 11.2 / 4 एन 3797 कहता है:
आर का आधार वर्ग बी, आर पर पहुंच योग्य है, अगर - बी का एक आविष्कृत सार्वजनिक सदस्य होगा एन का एक सार्वजनिक सदस्य, या - आर एक सदस्य या कक्षा एन के मित्र में होता है, और बी का एक आविष्कारित सार्वजनिक सदस्य एन के एक निजी या संरक्षित सदस्य होगा, या - आर एक सदस्य या किसी पीढ़ी के दोस्त में होता है जो पी व्युत्पन्न होता है एन से, और बी का एक आविष्कारित सार्वजनिक सदस्य पी का एक निजी या संरक्षित सदस्य होगा, या - एक वर्ग एस मौजूद है जैसे कि बी एस का एक आधार वर्ग एस और आर पर पहुँच योग्य है और यह एक आधार वर्ग है जो एन में पहुंच योग्य है
मुझे लगता है कि ए
सुलभ है आधार वर्ग बी
।
प्रकार "पॉइंटर टू सीवी डी" का एक प्राइवेट, जहां डी एक क्लास प्रकार है, को "पॉइंटर टू सीवी बी" की एक प्राइव्यू में परिवर्तित किया जा सकता है, जहां बी एक बेस क्लास है ( डी के खंड 10) यदि बी एक दुर्गम (खंड 11) या अस्पष्ट (10.2) बेस वर्ग डी, एक ऐसा प्रोग्राम जो इस रूपांतरण को जरूरी है, वह बीमार बन गया है
मैं क्यों प्राप्त कर सकता हूं एक संकलित-समय त्रुटि?
main.cpp: 17: 12: त्रुटि: अपने निजी बेस क्लास 'ए' को 'बी' नहीं डाली जा सकती
रूपांतरण मान्य बनाने के लिए मित्र
घोषणा के लिए, इसकी आवश्यकता है एक ऐसी जगह में होने के लिए जहां दोस्ती प्रभाव पड़ती है - जो कि बी
के स्वयं के कोड में है तथ्य यह है कि ए घोषित करता है
बी
दोस्त के रूप में B
की परिभाषा के बाहर कोई प्रभाव नहीं होता है।
Comments
Post a Comment