C ++ में दोस्ती कम से कम वैकल्पिक रूप से अंतर्निहित क्यों नहीं है? मैं समझता हूं कि स्पष्ट कारणों के लिए परिवर्तनशीलता और संवेदनशीलता को निषिद्ध किया जाता है (मैं इसे केवल सरल FAQ उद्धरण उत्तरों को बंद करने के लिए कहता हूं), लेकिन virtual friend class Foo;
पहेली की रेखाओं के साथ कुछ की कमी । क्या कोई इस फैसले के पीछे की ऐतिहासिक पृष्ठभूमि को जानता है? क्या दोस्ती वास्तव में सिर्फ एक सीमित हैक थी जिसने तब से कुछ अस्पष्ट सम्मानजनक उपयोगों में अपना रास्ता खोज लिया है?
स्पष्टीकरण के लिए संपादित करें: मैं निम्नलिखित परिदृश्य के बारे में बात कर रहा हूं, न कि जहां ए के बच्चे बी या उसके दोनों बच्चों के संपर्क में हैं। मैं फ्रेंडली फंक्शन के ओवरराइड्स के लिए वैकल्पिक रूप से अनुदान देने की कल्पना भी कर सकता हूं, आदि।
class A {
int x;
friend class B;
};
class B {
// OK as per friend declaration above.
void foo(A& a, int n) { a.x = n; }
};
class D : public B { /* can't get in A w/o 'friend class D' declaration. */ };
स्वीकृत उत्तर: जैसा कि लोकी कहता है , फ्रेंडली बेस क्लास में संरक्षित प्रॉक्सी फ़ंक्शंस बनाकर प्रभाव को कम या ज्यादा अनुकरण किया जा सकता है, इसलिए किसी वर्ग या आभासी पद्धति से मित्रता को स्वीकार करने की कोई सख्त ज़रूरत नहीं है । मुझे बॉयलरप्लेट प्रॉक्सिज़ (जो प्रभावी रूप से मित्रवत आधार बन जाता है) की आवश्यकता नापसंद है, लेकिन मुझे लगता है कि यह एक भाषा तंत्र पर बेहतर समझा जाता था जिसका अधिक बार दुरुपयोग किया जाएगा। मुझे लगता है कि शायद यह समय है जब मैंने खरीदा और पढ़ने के लिए Stroupstrup की The Design and Evolution of C ++ , जो मैंने यहां देखा है कि बहुत से लोग इस प्रकार के प्रश्नों के बारे में बेहतर जानकारी प्राप्त करने के लिए सलाह देते हैं ...