2009-06-11 1 views
121

में संरचना विरासत struct सी ++ में विरासत में हो सकता है?सी ++

उत्तर

221

हाँ, struct बिल्कुल class की तरह है, सिवाय इसके डिफ़ॉल्ट पहुंच-struct के लिए public है (जबकि यह class के लिए private है)।

+3

यह स्वीकार्य उत्तर होना चाहिए। – QuantumKarl

19

बेशक। सी ++ में, structs और कक्षाएं लगभग समान हैं (निजी की बजाय सार्वजनिक रूप से डिफ़ॉल्ट रूप से चीजें छोटे अंतरों में से हैं)।

99

हां। विरासत डिफ़ॉल्ट रूप से सार्वजनिक है।

सिंटेक्स (उदाहरण):

struct A { }; 
struct B : A { }; 
struct C : B { }; 
36

क्या एलेक्स और इवान पहले ही कहा गया है के अलावा, मैं जोड़ने के लिए है कि एक सी ++ struct एक सी struct जैसा नहीं है चाहते हैं।

सी ++ में, एक संरचना में सी ++ कक्षा की तरह विधियों, विरासत आदि हो सकते हैं।

जब एक वर्ग/struct से एक struct पाने, एक आधार वर्ग/struct के लिए डिफ़ॉल्ट पहुंच-विनिर्देशक सार्वजनिक है:

+1

एक सी ++ संरचना सी संरचना की तरह हो सकती है। जब यह होता है, इसे पीओडी - सादा ओल्ड डेटाटाइप कहा जाता है। यह एक महत्वपूर्ण भेद है, उदाहरण के लिए, केवल पीओडी structs संघों का हिस्सा हो सकता है। – camh

+6

लेकिन पीओडी के पास विधियां हो सकती हैं, इसलिए इस तरह की सी संरचनाओं की तरह "सी" नहीं हैं जो cgorshing के बारे में बात कर रहे हैं। –

3

सी ++ में, एक संरचना के भाग निम्नलिखित अंतर को छोड़कर एक वर्ग के रूप में ही है। और जब कक्षा प्राप्त होती है, तो डिफ़ॉल्ट पहुंच विनिर्देशक निजी होता है।

उदाहरण के लिए, प्रोग्राम 1 संकलन त्रुटि के साथ विफल रहता है और प्रोग्राम 2 ठीक काम करता है।

// Program 1 
#include <stdio.h> 

class Base { 
    public: 
     int x; 
}; 

class Derived : Base { }; // Is equivalent to class Derived : private Base {} 

int main() 
{ 
    Derived d; 
    d.x = 20; // Compiler error because inheritance is private 
    getchar(); 
    return 0; 
} 

// Program 2 
#include <stdio.h> 

struct Base { 
    public: 
     int x; 
}; 

struct Derived : Base { }; // Is equivalent to struct Derived : public Base {} 

int main() 
{ 
    Derived d; 
    d.x = 20; // Works fine because inheritance is public 
    getchar(); 
    return 0; 
}