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