क्या आप मुझे समझा सकते हैं कि friend
कक्षा के निजी डेटा तक पहुँच अधिकार देने के लिए कीवर्ड को क्यों पसंद किया जाता है?
क्या आप मुझे समझा सकते हैं कि friend
कक्षा के निजी डेटा तक पहुँच अधिकार देने के लिए कीवर्ड को क्यों पसंद किया जाता है?
जवाबों:
मित्र एक वर्ग के इंटरफ़ेस को विस्तारित करने का क्लासिक तरीका है।
लेकिन बड़ी बात यह है कि दोस्त स्पष्ट रूप से विशिष्ट वस्तुओं को एक वर्ग में कसने के लिए आपके इरादे का दस्तावेज है।
नोट: मित्र का उपयोग करके आप मित्रों को कक्षा में कसकर बांध रहे हैं।
एक आदर्श उदाहरण C ++ में स्ट्रीम ऑपरेटर है
class Plop
{
private:
int value;
friend std::ostream& operator<<(std::ostream& stream, Plop const& data);
friend std::istream& operator>>(std::istream& stream, Plop& data);
};
std::ostream& operator<<(std::ostream& stream, Plop const& data)
{
return stream << data.value << " ";
}
std::istream& operator>>(std::istream& stream, Plop& data)
{
return stream >> data.value;
}
यहाँ हम एक तरह से Plop क्लास के सार्वजनिक इंटरफ़ेस का विस्तार कर रहे हैं, जो हमें ऑब्जेक्ट को स्ट्रीम में और बाहर स्ट्रीम करने की अनुमति देता है, लेकिन आंतरिक कार्यान्वयन को उजागर किए बिना या भविष्य में कार्यान्वयन के सिरदर्द का कारण बन सकता है, जिसके लिए गेट / सेट विधियों के उपयोग की आवश्यकता होती है बनाए रखा जाए (क्योंकि वे सार्वजनिक इंटरफ़ेस का हिस्सा होंगे) भले ही आंतरिक कार्यान्वयन बदल गया हो।
नोट: यह एनकैप्सुलेशन को नहीं तोड़ता है, लेकिन यह स्ट्रीम ऑपरेटर्स को प्लॉप क्लास के कार्यान्वयन के लिए कसकर बाध्य करता है (यानी प्लॉप क्लास के कार्यान्वयन में किसी भी बदलाव के लिए स्ट्रीम ऑपरेटरों के कार्यान्वयन में बदलाव की आवश्यकता होगी)। लेकिन यह अपेक्षित है। सार्वजनिक इंटरफ़ेस (सार्वजनिक / संरक्षित विधियों सहित) के सभी भाग कसकर कार्यान्वयन के लिए बाध्य हैं।
लेकिन ध्यान दें: आपने स्पष्ट रूप से इस बंधन को वर्ग घोषणा के भाग के रूप में प्रलेखित किया है।
नोट: मैं निजी डेटा को उजागर करने के पसंदीदा तरीके के रूप में मित्र को नहीं संदर्भित करूंगा। कार्यान्वयन को उजागर करने के साथ मित्र का अधिक उपयोग उतना ही बुरा हो सकता है। सभी भाषा विशेषताओं की तरह इसका उपयोग विवेकपूर्ण तरीके से किया जाना चाहिए।
friend
पसंद किया गया था, तो आप आमतौर पर बाहर से निजी वर्ग के डेटा का उपयोग करने के लिए किन अन्य तरीकों का उपयोग करते हैं?