C++ स्ट्रक्चर (struct) क्लास के समान हैं, केवल डिफ़ॉल्ट एक्सेस स्पेसिफायर अलग है।
तुलना तालिका
| विशेषता | C struct | C++ struct |
|---|---|---|
| मेंबर फंक्शन्स | नहीं | हाँ |
| डिफ़ॉल्ट एक्सेस | public (केवल विकल्प) | public (private/protected भी संभव) |
| डायरेक्ट इनिशियलाइजेशन | नहीं (C99 डेजिग्नेटेड इनिट से अलग) | हाँ (कंस्ट्रक्टर, एग्रीगेट इनिट) |
| कीवर्ड आवश्यक | struct टाइप नाम में जरूरी | वैकल्पिक (MyStruct s;) |
| स्टेटिक मेंबर्स | नहीं | हाँ |
| खाली स्ट्रक्चर आकार | 0 (कुछ कंपाइलर्स 1) | 1 (कम से कम 1 बाइट) |
| डेटा हाइडिंग | नहीं | हाँ (private/protected) |
| इनहेरिटेंस | नहीं | हाँ |
| वर्चुअल फंक्शन्स | नहीं | हाँ |
उदाहरण: डिफ़ॉल्ट एक्सेस अंतर
// C++ कोड
#include <iostream>
using namespace std;
class MyClass {
int x = 10; // डिफ़ॉल्ट private
};
struct MyStruct {
int x = 10; // डिफ़ॉल्ट public
};
int main() {
MyClass c; // c.x एक्सेसिबल नहीं (एरर)
MyStruct s; // s.x एक्सेसिबल
cout << s.x; // 10
return 0;
}
उदाहरण: इनहेरिटेंस डिफ़ॉल्ट एक्सेस
class Base { public: int x = 10; };
class DerivedClass : Base { }; // डिफ़ॉल्ट private इनहेरिटेंस
struct DerivedStruct : Base { }; // डिफ़ॉल्ट public इनहेरिटेंस
int main() {
DerivedClass dc; // dc.x एक्सेसिबल नहीं
DerivedStruct ds; // ds.x एक्सेसिबल
return 0;
}
सर्वोत्तम अभ्यास
- C++ में: डेटा-ओनली एग्रीगेट्स के लिए
struct, इनवेरिएंट्स/बिहेवियर वाले टाइप्स के लिएclassउपयोग करें। - स्पष्ट
public:,private:लेबल्स लिखें। - C में:
structकेवल डेटा कंटेनर है।