सी ++ एक्सेस स्पेसिफायर

C Access Specifiers



सी ++ में, एक वर्ग चर और कार्यों का एक सेट है जिसे एक साथ काम करने के लिए कॉन्फ़िगर किया गया है। जब वर्ग के चरों को मान दिया जाता है, तो एक वस्तु प्राप्त होती है। एक वस्तु में एक वर्ग के समान चर और कार्य होते हैं, लेकिन इस बार, चर के मान होते हैं। एक वर्ग से कई वस्तुएँ बनाई जा सकती हैं। एक वस्तु दूसरी वस्तु से दूसरी वस्तु के चरों को निर्दिष्ट मूल्यों के विभिन्न सेट के अनुसार भिन्न होती है। कहा जाता है कि किसी क्लास से ऑब्जेक्ट बनाना ऑब्जेक्ट को इंस्टेंट करना है। भले ही दो अलग-अलग ऑब्जेक्ट्स के वैरिएबल के लिए समान मान हों, ये ऑब्जेक्ट अलग-अलग इकाइयाँ हैं, जिन्हें प्रोग्राम में अलग-अलग नामों से पहचाना जाता है। किसी वस्तु और उसके संगत वर्ग के चरों को डेटा सदस्य कहा जाता है। किसी वस्तु और उसके संगत वर्ग के कार्यों को सदस्य कार्य कहा जाता है। डेटा सदस्यों और सदस्य कार्यों को सदस्य कहा जाता है।

एक्सेस शब्द का अर्थ है किसी चर के मान को पढ़ना या बदलना, और इसका अर्थ किसी फ़ंक्शन का उपयोग करना भी है। सी ++ एक्सेस स्पेसिफायर शब्द, निजी, संरक्षित और सार्वजनिक हैं। वे तय करते हैं कि कोई सदस्य अपनी कक्षा के अन्य सदस्यों तक पहुँच प्राप्त कर सकता है, या यदि कोई फ़ंक्शन या ऑपरेटर कक्षा से बाहर है और वर्ग से संबंधित नहीं है, तो वह कक्षा के किसी भी सदस्य तक पहुँच सकता है। वे यह भी तय करते हैं कि क्या व्युत्पन्न (बच्चे) वर्ग का सदस्य मूल वर्ग के सदस्य तक पहुंच सकता है।







इस लेख को समझने और प्रदान किए गए कोड का परीक्षण करने के लिए C++ का बुनियादी ज्ञान आवश्यक है।



लेख सामग्री

सार्वजनिक और निजी विनिर्देशक

कक्षा
किसी वर्ग का कोई भी सदस्य उसी वर्ग के किसी भी अन्य सदस्य तक पहुंच सकता है, जो सार्वजनिक या निजी लेबल से स्वतंत्र है। निम्नलिखित कार्यक्रम पर विचार करें:



#शामिल
का उपयोग करते हुए नाम स्थानघंटे;

कक्षाद क्लास
{
निजी:
NSसंख्या 1;
NSअंक २;
सह लोक:
द क्लास(NSn1,NSएन 2)
{
संख्या 1=एन 1;अंक २=एन 2;
}
NSतरीका()
{
वापसीसंख्या 1;
}
};

NSमुख्य()
{
TheCla obj(10,बीस);
NSनंबर 2=ओबीजेतरीका();
लागत<<नंबर 2<<'एन';

// इंट नंबर 1 = obj.num1;

वापसी 0;
}

आउटपुट 10 है। निजी सदस्य num1 और num2 हैं। सार्वजनिक सदस्य TheCla () और विधि () हैं। ध्यान दें कि TheCla() कंस्ट्रक्टर फ़ंक्शन है जो ब्याज के चर को प्रारंभ करता है। एक्सेस स्पेसिफायर का क्षेत्र इसके लेबल से क्लास डिस्क्रिप्शन (परिभाषा) के अंत तक या किसी अन्य एक्सेस स्पेसिफायर के शुरू होने तक शुरू होता है।





मुख्य () फ़ंक्शन में, पहला स्टेटमेंट कंस्ट्रक्टर फ़ंक्शन को शामिल करने वाला इंस्टेंटेशन है, जो num1 और num2 को इनिशियलाइज़ करता है। अगला स्टेटमेंट क्लास के पब्लिक मेंबर, मेथड () को कॉल करता है।

अब, वर्ग विवरण (परिभाषा) में, सार्वजनिक सदस्य फ़ंक्शन, TheCla (), निजी सदस्यों, num1 और num2 को एक्सेस करता है। साथ ही, सार्वजनिक सदस्य फ़ंक्शन, विधि (), निजी सदस्य तक पहुँचता है, num1. एक वर्ग विवरण के भीतर कोई भी सदस्य उसी वर्ग विवरण के भीतर किसी अन्य सदस्य तक पहुंच सकता है; इससे कोई फर्क नहीं पड़ता कि कौन सा सदस्य निजी या सार्वजनिक है।



हालाँकि, एक फ़ंक्शन या ऑपरेटर जिसे वर्ग विवरण में और वर्ग विवरण के बाहर घोषित नहीं किया गया है, केवल कक्षा के सार्वजनिक सदस्यों तक ही पहुँच सकता है। मुख्य () फ़ंक्शन, उदाहरण के लिए, वर्ग विवरण के बाहर घोषित एक फ़ंक्शन है। यह केवल विधि () और TheCla () सार्वजनिक सदस्यों तक पहुँचने में सक्षम है। मुख्य () फ़ंक्शन के अंदर, TheCla () फ़ंक्शन obj (10, 20) है।

एक बाहरी फ़ंक्शन या बाहरी ऑपरेटर, जैसे कि मुख्य () फ़ंक्शन, कक्षा के किसी भी निजी सदस्य, जैसे num1 या num2 तक नहीं पहुंच सकता है। मुख्य () में अंतिम-लेकिन-एक कथन से टिप्पणी संकेतक, //, निकालें। यदि आप प्रोग्राम को संकलित करने का प्रयास करते हैं, तो ध्यान दें कि प्रोग्राम एक त्रुटि संदेश देते हुए संकलित नहीं होगा।

डिफ़ॉल्ट विनिर्देशक
एक वर्ग के लिए डिफ़ॉल्ट विनिर्देशक निजी है। तो, उपरोक्त वर्ग विवरण निम्नलिखित विवरण के समान है, निजी, लेकिन विनिर्देशक के बिना:

कक्षाद क्लास
{
NSसंख्या 1;
NSअंक २;
सह लोक:
द क्लास(NSn1,NSएन 2)
{
संख्या 1=एन 1;अंक २=एन 2;
}
NSतरीका()
{
वापसीसंख्या 1;
}
};

ध्यान दें : एक्सेस स्पेसिफायर लेबल स्पेसिफायर से शुरू होता है, और उसके बाद एक कोलन होता है।

संरक्षित विनिर्देशक

एक वर्ग विवरण के भीतर, और एक बाहरी फ़ंक्शन या बाहरी ऑपरेटर से, संरक्षित विनिर्देशक निजी विनिर्देशक के समान होता है। अब, उपरोक्त प्रोग्राम में प्राइवेट स्पेसिफायर को स्पेसिफायर से बदलें, प्रोटेक्ट करें, और कमेंट इंडिकेटर, // को मेन () फंक्शन में लास्ट-बट-वन स्टेटमेंट से हटा दें। यदि आप प्रोग्राम को संकलित करने का प्रयास करते हैं, तो ध्यान दें कि प्रोग्राम एक त्रुटि संदेश देते हुए संकलित नहीं होगा।

संरक्षित विनिर्देशक का मुद्दा तब सामने आता है जब व्युत्पन्न (विरासत में मिली) वर्ग के सदस्यों को आधार (अभिभावक) वर्ग के सदस्यों तक पहुँच प्राप्त करनी चाहिए।

सार्वजनिक व्युत्पन्न वर्ग सार्वजनिक सदस्यों के साथ
निम्नलिखित कार्यक्रम पर विचार करें:

#शामिल
का उपयोग करते हुए नाम स्थानघंटे;

कक्षाद क्लास
{
सह लोक:
NSसंख्या 1= 10;
संरक्षित:
NSअंक २= बीस;
निजी:
NSअंक3= 30;
};

कक्षाचाइल्डक्लास: सह लोकद क्लास
{
सह लोक:
NSविधि 1()
{
वापसीसंख्या 1;
}
NSविधि2()
{
वापसीअंक २;
}
/*इंट मेथड3 ()
{
वापसी संख्या ३;
} * /

};

NSमुख्य()
{
चाइल्डक्ला चाइल्डऑब्ज;
NSनं .1=चाइल्डऑब्ज.विधि 1();
लागत<<नं .1<<'एन';

NSनंबर 2=चाइल्डऑब्ज.विधि2();
लागत<<नंबर 2<<'एन';

वापसी 0;
}

आउटपुट है:
10
बीस

बेस क्लास में, num1 सार्वजनिक है, num2 सुरक्षित है, और num3 निजी है। व्युत्पन्न वर्ग में, सभी सदस्य कार्य सार्वजनिक होते हैं। पहला फ़ंक्शन, मेथड 1 (), सार्वजनिक डेटा सदस्य, num1 तक पहुँचता है। दूसरा फ़ंक्शन, मेथड 2 (), संरक्षित डेटा सदस्य, num2 तक पहुँचता है। तीसरा फ़ंक्शन, मेथड 3 (), हालांकि वर्तमान में टिप्पणी की गई है, को निजी डेटा सदस्य, num3 तक पहुंचना चाहिए।

एक व्युत्पन्न वर्ग को एक्सेस स्पेसिफायर (सार्वजनिक, संरक्षित या निजी) के बिना घोषित नहीं किया जाता है। ऊपर, व्युत्पन्न वर्ग को सार्वजनिक विनिर्देशक के साथ घोषित किया गया है, अर्थात्:

कक्षाचाइल्डक्लास: सह लोकद क्लास{}

अब व्युत्पन्न वर्ग में तीसरे सदस्य फ़ंक्शन परिभाषा को अन-टिप्पणी करें। यदि आप प्रोग्राम को संकलित करने का प्रयास करते हैं, तो ध्यान दें कि यह एक त्रुटि संदेश देते हुए संकलित नहीं होगा।

ध्यान दें : जब पूरे व्युत्पन्न वर्ग को सार्वजनिक घोषित किया जाता है, तो इसके सदस्य बेस क्लास के निजी सदस्यों तक नहीं पहुंच सकते हैं। हालाँकि, इसके सदस्य बेस क्लास के सार्वजनिक और संरक्षित सदस्यों तक पहुँच सकते हैं। उपरोक्त कार्यक्रम इसे दर्शाता है।

हालाँकि, ध्यान दें कि सार्वजनिक व्युत्पन्न वर्ग का एक सार्वजनिक सदस्य आधार वर्ग के संरक्षित सदस्य तक पहुँच सकता है।

व्युत्पन्न वर्ग विनिर्देशक और सदस्य विनिर्देशक

सार्वजनिक सदस्यों के साथ संरक्षित व्युत्पन्न वर्ग
उपरोक्त व्युत्पन्न वर्ग की घोषणा में सार्वजनिक विनिर्देशक को संरक्षित के साथ बदलें:

कक्षाचाइल्डक्लास: संरक्षितद क्लास{}

प्रोग्राम को संकलित करें और चलाएं और ध्यान दें कि परिणाम पहले जैसा ही है।

इसलिए, जब पूरे व्युत्पन्न वर्ग को संरक्षित घोषित किया जाता है, तो इसके सदस्य बेस क्लास के निजी सदस्यों तक नहीं पहुंच सकते हैं। हालाँकि, इसके सदस्य बेस क्लास के सार्वजनिक और संरक्षित सदस्यों तक पहुँच सकते हैं। यह वैसा ही है जब व्युत्पन्न वर्ग को सार्वजनिक घोषित किया जाता है।

ध्यान दें : सार्वजनिक व्युत्पन्न वर्ग का संरक्षित सदस्य बेस क्लास के संरक्षित सदस्य तक पहुंच सकता है।

सार्वजनिक सदस्यों के साथ निजी व्युत्पन्न वर्ग
उपरोक्त व्युत्पन्न वर्ग की घोषणा में संरक्षित विनिर्देशक को निजी से बदलें:

कक्षाचाइल्डक्लास: निजीद क्लास{}

प्रोग्राम को संकलित करें और चलाएं और ध्यान दें कि परिणाम पहले जैसा ही है।

इसलिए, जब पूरे व्युत्पन्न वर्ग को निजी घोषित किया जाता है, तो उसके सदस्य आधार वर्ग के निजी सदस्यों तक नहीं पहुंच सकते। हालाँकि, इसके सदस्य बेस क्लास के सार्वजनिक और संरक्षित सदस्यों तक पहुँच सकते हैं। यह वैसा ही है जब व्युत्पन्न वर्ग को संरक्षित या सार्वजनिक घोषित किया जाता है।

संरक्षित सदस्यों के साथ सार्वजनिक व्युत्पन्न वर्ग
निम्नलिखित प्रोग्राम टाइप करें, संकलित करें और चलाएं, जिसमें संपूर्ण व्युत्पन्न वर्ग सुरक्षित है, और इसके सदस्य भी सुरक्षित हैं। कुछ कोड खंड इस प्रकार हैं:

#शामिल
का उपयोग करते हुए नाम स्थानघंटे;

कक्षाद क्लास
{
सह लोक:
NSसंख्या 1= 10;
संरक्षित:
NSअंक २= बीस;
निजी:
NSअंक3= 30;
};

कक्षाचाइल्डक्लास: सह लोकद क्लास
{
संरक्षित:
NSविधि 1()
{
वापसीसंख्या 1;
}
NSविधि2()
{
वापसीअंक २;
}
/*इंट मेथड3 ()
{
वापसी संख्या ३;
} * /

};

NSमुख्य()
{
/*चाइल्डक्ला चाइल्डऑब्ज;
int no1 = childObj.method1 ();
लागत<
/*int no2 = childObj.method2();
लागत<
वापसी 0;
}

कार्यक्रम जैसा है वैसा ही काम करता है। कोई आउटपुट नहीं है, और प्रोग्राम को कैसे टाइप किया गया है, इसके आधार पर कोई आउटपुट नहीं होना चाहिए।

अब, व्युत्पन्न वर्ग में फ़ंक्शन परिभाषा, method3 () को अन-टिप्पणी करें। यदि आप प्रोग्राम को संकलित करने का प्रयास करते हैं, तो ध्यान दें कि यह एक त्रुटि संदेश देते हुए संकलित नहीं होगा। इसका मतलब है कि एक निजी सदस्य को बाहरी फ़ंक्शन, बाहरी ऑपरेटर या व्युत्पन्न वर्ग से एक्सेस नहीं किया जा सकता है। यह वही निष्कर्ष है जैसा कि ऊपर निष्कर्ष निकाला गया था, एक निजी सदस्य तक पहुंच के संबंध में।

ध्यान दें : संरक्षित व्युत्पन्न वर्ग का संरक्षित सदस्य बेस क्लास के संरक्षित सदस्य तक पहुंच सकता है।

अब, टिप्पणियों को व्युत्पन्न वर्ग में वापस रखें और मुख्य () फ़ंक्शन में पहले कोड खंड को अन-टिप्पणी करें। यदि आप प्रोग्राम को संकलित करने का प्रयास करते हैं, तो ध्यान दें कि प्रोग्राम मुख्य () फ़ंक्शन में पहले कोड सेगमेंट के कारण संकलित नहीं होगा। यह प्रभाव नया नहीं है। व्युत्पन्न वर्ग, बाहरी कार्यों और बाहरी ऑपरेटरों के अलावा, एक (आधार या व्युत्पन्न) वर्ग के संरक्षित और निजी सदस्य एक ही विनिर्देशक, निजी हैं। मुख्य () फ़ंक्शन किसी भी वर्ग के संरक्षित सदस्य को देखता है, चाहे वह आधार हो या व्युत्पन्न, एक ही विनिर्देशक के रूप में, निजी, और इसे एक्सेस करने से मना किया जाता है।

यदि मुख्य () फ़ंक्शन का दूसरा कोड खंड टिप्पणी नहीं किया गया है, तो वही स्पष्टीकरण लागू होगा। यही है, मुख्य () फ़ंक्शन व्युत्पन्न वर्ग या आधार वर्ग के संरक्षित या निजी सदस्य तक नहीं पहुंच पाएगा। यह इस बात से स्वतंत्र है कि व्युत्पन्न वर्ग का संरक्षित सदस्य बेस क्लास के संरक्षित सदस्य तक पहुंच सकता है या नहीं।

संरक्षित सदस्यों के साथ संरक्षित व्युत्पन्न वर्ग
उपरोक्त व्युत्पन्न वर्ग की घोषणा में सार्वजनिक विनिर्देशक को संरक्षित के साथ बदलें:

कक्षाचाइल्डक्लास: संरक्षितद क्लास{}

यदि यह पहले से नहीं किया गया है, तो कोड सेगमेंट की टिप्पणी को मुख्य () फ़ंक्शन में वापस रखें। प्रोग्राम को संकलित करें और चलाएं और ध्यान दें कि परिणाम पहले जैसा है।

संरक्षित सदस्यों के साथ निजी व्युत्पन्न वर्ग
उपरोक्त व्युत्पन्न वर्ग की घोषणा में संरक्षित विनिर्देशक को निजी से बदलें:

कक्षाचाइल्डक्लास: निजीद क्लास

प्रोग्राम को कंपाइल करके रन करें और नोट करें कि रिजल्ट पहले जैसा ही होगा।

निजी सदस्यों के साथ सार्वजनिक व्युत्पन्न वर्ग
उपरोक्त व्युत्पन्न वर्ग की घोषणा में निजी विनिर्देशक को सार्वजनिक रूप से बदलें:

कक्षाचाइल्डक्लास: सह लोकद क्लास{}

व्युत्पन्न वर्ग के सदस्यों को निजी बनाएं। प्रोग्राम को संकलित करें और चलाएं। परिणाम संरक्षित सदस्यों के मामले में सार्वजनिक व्युत्पन्न वर्ग से अलग नहीं है।

निजी सदस्यों के साथ संरक्षित व्युत्पन्न वर्ग
उपरोक्त व्युत्पन्न वर्ग की घोषणा में सार्वजनिक विनिर्देशक को संरक्षित के साथ बदलें:

कक्षाचाइल्डक्लास: संरक्षितद क्लास{}

प्रोग्राम को संकलित करें और चलाएं। यह परिणाम संरक्षित व्युत्पन्न वर्ग के साथ संरक्षित सदस्यों के मामले से अलग नहीं है।

निजी सदस्यों के साथ निजी व्युत्पन्न वर्ग
उपरोक्त व्युत्पन्न वर्ग की घोषणा में संरक्षित विनिर्देशक को निजी से बदलें:

कक्षाचाइल्डक्लास: निजीद क्लास{}

प्रोग्राम को संकलित करें और चलाएं। यह परिणाम संरक्षित सदस्यों के मामले में निजी व्युत्पन्न वर्ग से अलग नहीं है।

निष्कर्ष

सी ++ एक्सेस स्पेसिफायर निजी, संरक्षित और सार्वजनिक शब्द हैं। वे एक वर्ग के सदस्यों के लिए पहुँच तय करते हैं। एक्सेस स्पेसिफायर का क्षेत्र इसके लेबल से शुरू होता है, क्लास डिस्क्रिप्शन (परिभाषा) के अंत तक, या किसी अन्य एक्सेस स्पेसिफायर की शुरुआत तक। किसी वर्ग का कोई भी सदस्य उसी वर्ग के किसी अन्य सदस्य तक पहुँच सकता है। किसी वर्ग के निजी सदस्य को किसी बाहरी फ़ंक्शन, किसी बाहरी ऑपरेटर या व्युत्पन्न वर्ग द्वारा एक्सेस नहीं किया जा सकता है।

बेस क्लास के सदस्य को संरक्षित किया जाना चाहिए ताकि बेस क्लास के एक निजी सदस्य को व्युत्पन्न वर्ग के सदस्य द्वारा एक्सेस किया जा सके। बेस क्लास के इस संरक्षित सदस्य को बाहरी फ़ंक्शन या बाहरी ऑपरेटर द्वारा बेस क्लास के निजी सदस्य के रूप में देखा जाता है।

किसी वर्ग के सार्वजनिक सदस्य को किसी बाहरी फ़ंक्शन, किसी बाहरी ऑपरेटर या व्युत्पन्न वर्ग द्वारा पहुँचा जा सकता है।

किसी वर्ग में किसी एक्सेस स्पेसिफायर के अभाव में, प्राइवेट स्पेसिफायर मान लिया जाता है। यानी, डिफ़ॉल्ट एक्सेस स्पेसिफायर निजी है।

इस कार्य में प्रयुक्त सन्दर्भ