C ++ में मित्र घोषणा - सार्वजनिक और निजी के बीच अंतर


144

क्या किसी फंक्शन फंक्शन / क्लास को निजी या सार्वजनिक घोषित करने में कोई अंतर है? मैं इस बारे में कुछ भी ऑनलाइन नहीं जान सकता।

मेरा मतलब है:

class A
{
 public: 
      friend class B;
 };

तथा

class A
{
 private: //or nothing as the default is private
      friend class B;
 };

क्या कोई अंतर है?


29
ऐसी गलत सूचना ... कोई व्यक्ति मित्र बनने के लायक नहीं था। यह पूरी तरह से आप पर निर्भर करता है कि आप अपने दोस्तों को अपने प्राईवेट के साथ पसंद करते हैं या नहीं।
टोनी डेलरो

क्या मैं पूछ सकता हूं कि एक मित्र वर्ग क्या है: '(?
मैं फैंटम I

3
@ आई फैंटम - यह एक घोषणा है जो friendवर्ग के एक उदाहरण को घोषणा privateकरने वाले वर्ग में घोषित सदस्यों तक पहुंचने की अनुमति देता है । इस उदाहरण के मामले में, कक्षा B का एक उदाहरण कक्षा A के निजी सदस्यों तक पहुंच सकता है
BIU


2
इस सवाल ने मुझे इस साइट पर बहुत अधिक अंक दिए हैं। सब ठीक तो।
बीआईयू

जवाबों:


141

नहीं, इसमें कोई अंतर नहीं है - आप बस यह बताएं कि क्लास बी कक्षा ए का दोस्त है और अब अपने निजी और संरक्षित सदस्यों तक पहुंच सकता है, बस।


5
इसलिए मुझे लगता है कि जिसने भी मुझसे कहा कि बस यह नहीं पता था कि वे किस बारे में बात कर रहे थे। धन्यवाद :)
बीआईयू

लेकिन प्रलेखन उद्देश्यों के लिए, क्या आप friendकार्यान्वयन विस्तार या इंटरफ़ेस के भाग पर विचार करेंगे ?
टेम्प्लेट

1
@TemplateRex: IMO जो इंटरफ़ेस का हिस्सा है - यह काफी मजबूत दावा है कि इसमें कुछ (यादृच्छिक) हैं class Friendजो वर्तमान वर्ग के सभी निजी सदस्यों तक पहुंच सकते हैं।
शार्प फुट

यादृच्छिक वर्ग के लिए, हाँ। लेकिन कहते हैं कि आप operator==(T, T)निजी डेटा सदस्यों का उपयोग करके लागू करते हैं T, और friendकार्यान्वयन विवरण के रूप में उपयोग करते हैं ताकि operator==एक गैर-सदस्य के रूप में प्रकट हो सके। IMO, यह दोस्ती सार्वजनिक इंटरफ़ेस में प्रदर्शित नहीं होनी चाहिए (जैसा कि Doxygen द्वारा उत्पन्न किया जाएगा)
TemplateRex

मैंने कुछ समय पहले यहां स्टैकओवरफ्लो में पढ़ा था कि कुछ कंपाइलर, मुझे लगता है कि कुछ पुराने बुग्गी वाले हैं, अगर किसी गैर-सार्वजनिक क्षेत्र में एक मित्र घोषणा होती है तो भ्रमित हो जाएगा।
पेरेग्रेसिंग-एलके

36

चूंकि वाक्य-विन्यास कक्षा के friend class Bकिसी सदस्य को घोषित नहीं करता है A, इसलिए इससे कोई फर्क नहीं पड़ता कि आप इसे कहां लिखते हैं, कक्षा वर्ग Bका मित्र है A

इसके अलावा, यदि आप इसके खंड friend class Bमें लिखते हैं , तो इसका मतलब यह नहीं है कि यह केवल और सदस्यों तक ही पहुंच सकता है । protectedABprotectedpublicA

हमेशा याद रखें कि एक बार Bदोस्त बनने के बाद A, यह किसी भी सदस्य तक पहुंच सकता है A, चाहे आप जिस भी खंड में लिखें friend class B


3
इसलिए मुझे लगता है कि जिसने भी मुझसे कहा कि बस यह नहीं पता था कि वे किस बारे में बात कर रहे थे। धन्यवाद :)
बीआईयू

-2

मित्र घोषणा एक वर्ग निकाय में दिखाई देती है और एक फ़ंक्शन या किसी अन्य वर्ग की पहुंच को उस कक्षा के निजी और संरक्षित सदस्यों को प्रदान करता है जहां मित्र घोषणा प्रकट होती है।

चूंकि इस तरह के एक्सेस स्पेसियर का मित्र घोषणाओं के अर्थ पर कोई प्रभाव नहीं पड़ता है (वे निजी या सार्वजनिक रूप से प्रकट हो सकते हैं: खंड, बिना किसी अंतर के)।


नए होने के बिना सात साल पुराने सवाल का जवाब देना। कृपया चीजों को और अधिक दोहराए जाने से दूर करें।
मशीगारगढ़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.