C++ में क्लास या स्ट्रक्चर: कब क्या चुनें? मुख्य प्रश्न का विश्लेषण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ में क्लास या स्ट्रक्चर: शाश्वत बहस

\n\n

एक स्थिति की कल्पना करें: आप C++ में कोड लिख रहे हैं, और आपको एक नया डेटा प्रकार बनाने की आवश्यकता है। आपके दिमाग में तुरंत सवाल आता है: «मुझे class का उपयोग कब करना चाहिए, और struct का कब?»। यह सवाल न केवल शुरुआती लोगों को परेशान करता है — Stack Overflow पर इसने हजारों व्यूज़ और दर्जनों गर्म चर्चाएँ एकत्रित की हैं। और यह आश्चर्य की बात नहीं है: क्योंकि C++ में ये दो कीवर्ड पहली नज़र में एक ही काम करते हैं, लेकिन बारीकियों के साथ।

\n\n

इस लेख में हम एक बार और हमेशा के लिए समझेंगे कि class और struct के बीच वास्तविक अंतर क्या है, कब क्या चुनना है, और गलती से कैसे बचना है। चलिए शुरू करते हैं!

\n\n

मुख्य अंतर: डिफ़ॉल्ट एक्सेस मॉडिफायर

\n\n

यदि आप सोचते हैं कि class और struct पूरी तरह से अलग संस्थाएँ हैं, तो आप गलत हैं। C++ में उनके बीच एकमात्र मूलभूत अंतर डिफ़ॉल्ट एक्सेस मॉडिफायर है:

\n\n
    \n
  • struct: सभी सदस्य (फ़ील्ड और मेथड) डिफ़ॉल्ट रूप से public होते हैं।
  • \n
  • class: सभी सदस्य डिफ़ॉल्ट रूप से private होते हैं।
  • \n
\n\n

बस इतना ही। भाषा स्तर पर और कोई अंतर नहीं है। न प्रदर्शन में, न कोई जादू। केवल पहुँच। आइए उदाहरणों के साथ देखें कि यह कैसे काम करता है।

\n\n

struct के साथ उदाहरण

\n
struct Point {\n    int x;\n    int y;\n};\n\n// सीधे एक्सेस किया जा सकता है\nPoint p;\np.x = 10;\np.y = 20;
\n\n

class के साथ उदाहरण

\n
class Point {\n    int x;  // डिफ़ॉल्ट रूप से private!\n    int y;\npublic:\n    void setX(int val) { x = val; }\n    void setY(int val) { y = val; }\n};\n\nPoint p;\n// p.x = 10; // त्रुटि! x - private\np.setX(10);   // यह ठीक है
\n\n

जैसा कि आप देख सकते हैं, अंतर केवल इसमें है कि आप डेटा को «डिफ़ॉल्ट रूप से» कैसे छिपाते हैं। लेकिन इसका मतलब यह नहीं है कि class और struct के बीच चयन स्वाद का मामला है। कुछ स्थापित प्रथाएँ हैं।

\n\n

struct कब चुनें?

\n\n

C++ समुदाय में एक अनकही सहमति है: struct — सरल डेटा के लिए। struct का उपयोग करें जब आपका प्रकार बिना जटिल तर्क के केवल सार्वजनिक फ़ील्ड का एक सेट हो। क्लासिक उदाहरण:

\n\n
    \n
  • बिंदु के निर्देशांक (x, y)
  • \n
  • RGB में रंग (r, g, b)
  • \n
  • कॉन्फ़िगरेशन (width, height, title)
  • \n
  • ऑपरेशन का परिणाम (success, errorMessage)
  • \n
\n\n

ऐसे मामलों में डेटा को छिपाने की आवश्यकता नहीं है — वे वैसे भी सार्वजनिक हैं। struct कोड को साफ और छोटा बनाता है। इसके अलावा, struct POD-प्रकारों (Plain Old Data) के लिए बहुत उपयुक्त है — ऐसी संरचनाएँ जिन्हें सरल memcpy से कॉपी किया जा सकता है।

\n\n

struct के सही उपयोग का उदाहरण

\n
struct Vector2 {\n    float x;\n    float y;\n    \n    // सरल मेथड जोड़े जा सकते हैं\n    float length() const {\n        return std::sqrt(x*x + y*y);\n    }\n};\n\n// सरल डेटा कंटेनर के रूप में उपयोग करें\nVector2 v = {3.0f, 4.0f};\nstd::cout << v.length(); // 5.0
\n\n

ध्यान दें: भले ही struct में मेथड हों, यह सामान्य है। मुख्य बात यह है कि फ़ील्ड सार्वजनिक रहते हैं, और प्रकार को जटिल इनवेरिएंट तर्क की आवश्यकता नहीं होती है।

\n\n

class कब चुनें?

\n\n

Class — पूर्ण वस्तुओं के लिए डिफ़ॉल्ट विकल्प। class का उपयोग करें जब:

\n\n
    \n
  • आपके पास जटिल तर्क है जिसके लिए एनकैप्सुलेशन की आवश्यकता है।
  • \n
  • आप सख्ती से नियंत्रित करना चाहते हैं कि डेटा कैसे बदलता है।
  • \n
  • आपके प्रकार में इनवेरिएंट हैं (जैसे, «उम्र नकारात्मक नहीं हो सकती»)।
  • \n
  • आप इनहेरिटेंस, वर्चुअल फंक्शन, पॉलीमॉर्फिज़्म का उपयोग करते हैं।
  • \n
\n\n

क्लासिक उदाहरण — «बैंक खाता» क्लास। बैलेंस सार्वजनिक नहीं होना चाहिए, अन्यथा कोई गलती से नकारात्मक मान सेट कर सकता है।

\n\n

class के सही उपयोग का उदाहरण

\n
class BankAccount {\nprivate:\n    double balance;\n    std::string owner;\n    \npublic:\n    BankAccount(const std::stri                

ब्लॉग

पुस्तक अनुशंसाएँ