2013-01-17 12 views
9

मैं एक शुरुआती स्तर पर एक ऑब्जेक्ट उन्मुख प्रोग्रामिंग उत्साही हूं।कक्षा दोस्ती - एक पहेली

class A { 
}; 

class B { 
protected: 
    friend class A; 
}; 

class C { 
public: 
    friend class B; 
}; 

ऊपर नमूना कोड का जिक्र करते हुए, यह मानते हुए ऊपर की कक्षाओं था डेटा सदस्यों, क्या सी सदस्यों के नाम एक के सदस्यों की घोषणाओं में इस्तेमाल किया जा सकता: मैं निम्नलिखित पहेली का सामना करना पड़ा?

  1. केवल निजी सदस्यों

  2. केवल संरक्षित सदस्यों

  3. सी के डेटा के सदस्यों के सभी

  4. केवल सार्वजनिक सदस्यों

  5. सी डेटा सदस्यों में से कोई भी *

मेरी पसंद जवाब 4 है क्योंकि दोस्ती संक्रमणीय नहीं है। इसलिए, ए बी का मित्र है, लेकिन ए सी का मित्र नहीं है (भले ही बी सी का मित्र है)। क्या यह सही सोच है?

इसके अलावा, मेरी समस्या यह है कि अब तक (ट्यूटोरियल में) मैं exmaples जिसमें दोस्ती इस तरह घोषित किया गया था मिले हैं:

class X { 
public: 
    friend class Y; 
}; 

अंतर के बजाय अगर सार्वजनिक विनिर्देशक उपयोग हम क्या है संरक्षित एक? कि जैसा:

class X { 
protected: 
    friend class Y; 
}; 
+0

+1। – jrok

उत्तर

7
  1. आप सही हैं। दोस्ती संक्रमणीय नहीं है और न ही यह विरासत में है।
  2. यह friend घोषणा के द्वारा निर्दिष्ट पहुंच विनिर्देशक के तहत कोई फर्क नहीं पड़ता है।

जब तक कक्षा A कक्षा C कक्षा के मित्र घोषित नहीं की जाती है। आप A में C के किसी भी संरक्षित या निजी सदस्यों तक नहीं पहुंच सकते हैं। एक अच्छी तरह से तैयार प्रश्न के लिए

+0

स्पष्टीकरण के लिए धन्यवाद – Prz3m3k

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