2012-06-07 14 views
5

क्या आप मुझे सुनिश्चित कर सकते हैं, अगर struct में सभी एक्सेस विनिर्देशक (विरासत सहित) public हैं?संरचना और वर्ग और विरासत (सी ++)

दूसरे शब्दों में: वे बराबर हैं?

class C: public B, public A { public: 
    C():A(1),B(2){} 
    //... 
}; 

और

struct C: B, A { 
    C():A(1),B(2){} 
    //... 
}; 
+0

आप इसे अपने आप को बहुत ही छोटे कार्यक्रम के साथ परीक्षण कर सकते थे। – Nobody

+3

सी ++ में कक्षाओं और structs के बीच मतभेदों के बारे में इस धागे को देखें http://stackoverflow.com/questions/92859/what-are-the-differences-between-struct-and-class-in-c –

+2

@ नोबॉडी: लेकिन तो वह अपने कंपाइलर पर भरोसा नहीं करेगा बग्स :) –

उत्तर

2

C++ standard, 11.2.2 से, पृष्ठ 208:

एक आधार वर्ग के लिए एक एक्सेस-विशिष्ट एर के अभाव में, सार्वजनिक माना जाता है जब व्युत्पन्न वर्ग struct घोषित किया जाता है और निजी माना जाता है जब कक्षा कक्षा घोषित किया गया है।

तो हाँ, आप सही हैं: जब व्युत्पन्न वर्ग एक struct है, यह public के रूप में अन्य वर्गों को विरासत में निर्दिष्ट न किए।

7

हाँ, वे सभी सार्वजनिक कर रहे हैं।

struct A : B { 
    C c; 
    void foo() const {} 
} 

struct A : public B { 
public: 
    C c; 
    void foo() const {} 
} 

के बराबर है सदस्यों के लिए, यह §11 में निर्दिष्ट किया जाता:

एक वर्ग कीवर्ड वर्ग के साथ परिभाषित के सदस्य डिफ़ॉल्ट से निजी हैं। कीवर्ड स्ट्रक्चर या यूनियन के साथ परिभाषित कक्षा के सदस्य डिफ़ॉल्ट रूप से सार्वजनिक होते हैं।

और §11.2 में आधार वर्ग के लिए के लिए:

एक आधार वर्ग के लिए एक एक्सेस-विनिर्देशक के अभाव में, सार्वजनिक माना जाता है जब व्युत्पन्न वर्ग के साथ परिभाषित किया गया है वर्ग-कुंजी struct और निजी माना जाता है जब वर्ग को कक्षा-कुंजी वर्ग के साथ परिभाषित किया जाता है।

जहां संदर्भ C++ 11 मानक के संदर्भ हैं।

2

आधार वर्ग और आधार वर्ग के सदस्यों के सी ++ 11 स्टैंडर्ड (N3242 draft)

11,2 पहुँच क्षमता से

2 एक आधार वर्ग के लिए एक एक्सेस-विनिर्देशक के अभाव में, सार्वजनिक है माना जाता है कि व्युत्पन्न वर्ग को कक्षा-कुंजी संरचना के साथ परिभाषित किया गया है और निजी माना जाता है जब कक्षा को कक्षा-कुंजी कक्षा के साथ परिभाषित किया जाता है।

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