2013-08-19 6 views
24

क्या हम एक वर्ग के निर्माता बनने के लिए दोस्त बन सकते हैं? मुझे लगता है कि यह नहीं हो सकता है। लेकिन मैंने कहीं पढ़ा है कि यह हो सकता है, लेकिन मैं करने में असमर्थ था। यदि हां आप कृपया कुछ उदाहरण कोड प्रदान कर सकते हैं।क्या कोई कन्स्ट्रक्टर फ़ंक्शन सी ++ में मित्र बन सकता है?

+0

आप पूरे वर्ग को इसके बजाय दोस्त क्यों नहीं घोषित करते? – wilx

+0

अपना कोड पोस्ट करें। –

+1

@ करोलो हॉर्वथ: यह सामान्य रूप से उपयोगी है, लेकिन आप यहां क्या दिखाएंगे? 'दोस्त <यहाँ क्या होता है>;' यह इस सवाल में कुछ भी नहीं जोड़ता है। – MSalters

उत्तर

30

हाँ, यह कर सकते हैं:

class Y 
{ 
public: 
    Y(); 
}; 
class X 
{ 
private: 
    void foo() {} 
    friend Y::Y(); 
}; 
Y::Y() 
{ 
    X x; x.foo(); 
} 

रूप प्रति 11.3 दोस्त [class.friend]

5) एक दोस्त घोषणा एक ओवरलोड नाम या ऑपरेटर के लिए संदर्भित करता है, केवल समारोह निर्दिष्ट पैरामीटर प्रकार से एक दोस्त बन जाता है। एक दसवीं कक्षा की एक सदस्य समारोह एक वर्ग वाई के एक दोस्त हो सकता है

[उदाहरण:

class Y { 
friend char* X::foo(int); 
friend X::X(char); // constructors can be friends 
friend X::~X(); // destructors can be friends 
}; 

अंत उदाहरण]

(जोर मेरा)

+2

+1 :) – SteveLove

+0

यह वैध 'कक्षा वाई { सार्वजनिक: मित्र वाई (int); } ' यदि हां, तो आप वाई (int) को कैसे परिभाषित करेंगे; – Shreyas

+3

@ श्रेयस जो समझ में नहीं आता, एक वर्ग (या सदस्य) खुद का मित्र क्यों होगा? –

संबंधित मुद्दे