2011-04-07 17 views
5

किसी वर्ग वर्ग के रूप में कक्षा को परिभाषित करते समय, क्या इससे कोई फर्क पड़ता है कि कौन से एक्सेसर अनुभाग परिभाषाओं को रखा गया है, और यदि ऐसा है तो क्या सदस्यों को उस सदस्य को बदल दिया जाता है?मित्र वर्ग और एक्सेसर अनुभागों की परिभाषा

class aclass 
{ 
private: 
    // friend bclass; 

public: 
    // friend bclass; 

protected: 
    // friend bclass; 
}; 

class bclass 
{}; 

उत्तर

1

सम्मेलन द्वारा किसी भी एक्सेसर्स के अंदर मित्र कार्य नहीं रखा जाता है, क्योंकि परिभाषा के अनुसार वे कक्षा का हिस्सा नहीं हैं। एक बार जब आप किसी वर्ग के अंदर दोस्त वर्ग/समारोह जगह (कहते हैं 'Aclass') कहीं भी

class Elephants 
{ 
//friend void notAMemberFuncion(argument 123); 

public: 
// member functions; 

protected: 
// data members; 
}; 
+1

प्रश्न पढ़ें, दोस्त के कार्यों के बारे में बात नहीं बल्कि बल्कि दोस्त वर्गों के बारे में बात करते हैं। – Zamfir

2

: आप कुछ इस तरह कर सकते हैं। इसके पास कक्षा के सभी परिभाषित सदस्यों तक पहुंच होगी (सार्वजनिक/निजी/संरक्षित के बावजूद); उदाहरण के लिए:

class aClass 
{ 
public: int pub; void fun1() {} 
protected: int pro; void fun2() {} 
private: int pri; aClass(const aClass& o); 
    friend void outsider(); 
}; 

मित्र समारोह बाहरी व्यक्ति() पब, समर्थक, pri, fun1, fun2 देख सकते हैं; लेकिन इस मामले में ए क्लास कॉपी कन्स्ट्रक्टर नहीं (अगर इसे कहीं भी परिभाषित नहीं किया गया है)।

1

मित्र वर्ग/फ़ंक्शन कक्षा के सभी निजी/संरक्षित/सार्वजनिक सदस्यों तक पहुंच सकता है, जो मित्र वर्ग/फ़ंक्शन रखा गया अनुभाग एक्सेस करता है, इससे कोई फर्क नहीं पड़ता है। सार्वजनिक अनुभाग में मित्र वर्ग/फ़ंक्शन डालने का सुझाव दिया गया है, क्योंकि मित्र कक्षा इंटरफ़ेस का हिस्सा हैं।

3

पहुँच विनिर्देशक दोस्त समारोह/क्लास
पर लागू नहीं हैं आप मित्र समारोह या कक्षा किसी भी पहुँच Specifier और समारोह/वर्ग के तहत घोषणा कर सकते हैं अभी भी सभी सदस्य चर के लिए उपयोग होगा (उस कक्षा के सार्वजनिक, संरक्षित & निजी)।

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