सी ++ में संरचना विरासत


जवाबों:


290

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


129

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

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

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

46

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

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


4
C ++ संरचना C संरचना की तरह हो सकती है। जब यह होता है, तो इसका नाम POD - सादा पुराना डेटाटाइप होता है। यह एक महत्वपूर्ण अंतर है, उदाहरण के लिए, केवल POD संरचनाएं यूनियनों का हिस्सा हो सकती हैं।
7

9
लेकिन PODs के तरीके हो सकते हैं, इसलिए "C" जैसे अर्थों में "स्ट्रक्चर्स" नहीं हैं जो cgorshing की बात कर रहे हैं।
स्टीव जेसोप

यदि यह POD है, तो इसके पास तरीके नहीं हैं। अन्यथा नाम निरर्थक है।
आरएल-एस

24

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


23

C ++ में, एक संरचना की विरासत निम्नलिखित अंतरों को छोड़कर एक वर्ग के समान है:

किसी वर्ग / संरचना से एक संरचना प्राप्त करते समय, आधार वर्ग / संरचना के लिए डिफ़ॉल्ट पहुँच-निर्दिष्ट सार्वजनिक है। और जब एक वर्ग प्राप्त होता है, तो डिफ़ॉल्ट पहुंच निर्दिष्ट निजी होती है।

उदाहरण के लिए, प्रोग्राम 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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.