2012-06-19 11 views
13

में मित्र फ़ंक्शन मुझे C++ में मित्र कार्यों से संबंधित संदेह है। मित्र कार्य क्लैस का सदस्य कार्य नहीं है और इसे सीधे मुख्य से बुलाया जा सकता है। तो, क्या फर्क यह है कि अगर हम private भीतर friend समारोह या class की public हिस्सा रखने पड़ता है। मैंने आमतौर पर देखा है कि friend फ़ंक्शंस हमेशा सार्वजनिक भाग में होते हैं। किस परिदृश्य में हमें के भीतर friend फ़ंक्शन रखना चाहिए।सी ++

+1

मुझे नहीं पता कि यह करीबी वोट क्यों प्राप्त कर रहा है ... यह एक पूरी तरह से समझदार (अगर खराब शब्द) प्रश्न है। – ildjarn

+0

+1 - "एक निजी दोस्त फ़ंक्शन बनाने के लिए यह कब अच्छा डिज़ाइन है" एक बिल्कुल सही सवाल है। (या यह कभी क्यों नहीं है।) – djechlin

+5

"मित्र घोषणा घोषणा कक्षा में कहीं भी रखा जा सकता है। यह एक्सेस कंट्रोल कीवर्ड से प्रभावित नहीं है।" - http://en.wikipedia.org/wiki/Friend_function –

उत्तर

19

संकलक एक दोस्त समारोह एक वर्ग की निजी या सार्वजनिक (या सुरक्षित) खंड में है कि क्या करने के लिए किसी भी ध्यान देना नहीं है। ज्यादातर लोग इसे सार्वजनिक अनुभाग में डालते हैं, लेकिन यह कहां रखा जाए, इस पर ध्यान दिए बिना यह सार्वजनिक रूप से दिखाई देगा।

4

इससे कोई फर्क नहीं पड़ता कि आप इसे public: या private: कक्षा के हिस्से में घोषित करते हैं। यह वही काम करेगा।

2

private अनुभाग में मित्र घोषणाओं का एक कारण यह है कि यह उन सदस्यों के कार्यों या वस्तुओं के साथ उन्हें एक साथ रख सकता है जिनकी उन्हें पहुंच है।

उसके अलावा, वहाँ कोई अंतर नहीं है।

2

friend कीवर्ड एक और समारोह जो अपने वर्ग के हिस्सा नहीं है करने के लिए private पहुंच देने के लिए सिर्फ यहाँ है। चूंकि यह आपकी कक्षा का हिस्सा नहीं है, इसलिए यह public/private विनिर्देशकों से प्रभावित नहीं है।

0

यह कोई बात नहीं है जहाँ आप दोस्ती घोषणा डाल दिया। यह किसी भी वर्ग के हिस्सों (सार्वजनिक, निजी या संरक्षित) के अंदर मौजूद हो सकता है लेकिन किसी भी समारोह या कुल के बाहर रखा जाना चाहिए।

यहाँ एक अच्छा उदाहरण और www.cprogramming.com से विवरण है:

यह एक वर्ग के निजी चर अन्य वर्ग को देखने के लिए, भले ही इन चरों है शायद इसी कारण नहीं होना चाहिए अक्सर उपयोगी है वर्ग इंटरफ़ेस का हिस्सा है जो कक्षा का समर्थन करता है। उदाहरण के लिए, यदि आप एक बाइनरी पेड़ लिख रहे थे, तो आप एक नोड क्लास का उपयोग करना चाहते हैं जिसमें निजी डेटा है, लेकिन यह फ़ंक्शंस के लिए सुविधाजनक होगा जो वास्तव में डेटा को सीधे एक्सेस करने में सक्षम होने के लिए नोड्स को एक साथ जोड़ता है नोड इंटरफेस के माध्यम से काम करने के बिना। कभी-कभी, यह किसी एक्सेसर फ़ंक्शन के लिए पर भी डेटा के लिए अप्रत्यक्ष पहुंच प्रदान करने के लिए उपयुक्त नहीं हो सकता है।