C ++ और उसके प्रकारों में एक स्टोरेज क्लास क्या है?



इस स्टोरेज क्लासेस ब्लॉग में, हम C ++ में प्रयुक्त विभिन्न स्टोरेज क्लास जैसे कि ऑटो, रजिस्टर, स्टैटिक, एक्सटर्नल और म्यूटेबल को उदाहरणों के साथ देखेंगे।

में भंडारण वर्ग सी ++ चर / कार्यों के जीवनकाल और दृश्यता को परिभाषित करता है। जीवनकाल वह अवधि है जब तक चर सक्रिय रहता है और दृश्यता कार्यक्रम के विभिन्न मॉड्यूल से एक चर की पहुंच है। यह एक प्रोग्राम के रनटाइम के दौरान एक विशेष चर के अस्तित्व का पता लगाने में मदद करता है। इस संग्रहण कक्षाओं के ब्लॉग में, हम C ++ में उपयोग किए जाने वाले विभिन्न भंडारण वर्गों को देखेंगे।

चलो शुरू करें।





C ++ में Storage Class क्या है?

C ++ के हर वेरिएबल में डेटा टाइप और स्टोरेज क्लास होता है। डेटा प्रकार डेटा के प्रकार को निर्दिष्ट करता है जिसे एक चर में संग्रहीत किया जा सकता है जैसे कि इंट, फ्लोट, चार इत्यादि। भंडारण वर्ग एक चर के दो अलग-अलग गुणों को नियंत्रित करता है: जीवनकाल और गुंजाइश।

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



भंडारण वर्ग के प्रकार

C ++ प्रोग्राम में पाँच संग्रहण वर्ग हैं:

  • ऑटो
  • रजिस्टर करें
  • स्थिर
  • बाहरी
  • उत्परिवर्तनीय

आइए प्रत्येक भंडारण वर्ग पर विस्तार से चर्चा करें।

ऑटो स्टोरेज क्लास

स्वचालित (ऑटो) भंडारण वर्ग सभी स्थानीय चर के लिए डिफ़ॉल्ट भंडारण वर्ग है, जो किसी फ़ंक्शन या ब्लॉक के अंदर घोषित किए जाते हैं। ऑटो कीवर्ड का उपयोग शायद ही कभी लिखते समय किया जाता है C ++ प्रोग्राम



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

आप पॉइंटर वैरिएबल का उपयोग करके उनके दायरे के बाहर ऑटो वैरिएबल तक पहुंच सकते हैं। आपको उसी मेमोरी लोकेशन की ओर इशारा करने की जरूरत है, जहां चर निवास कर रहे हैं।

इसका जीवनकाल समारोह के जीवनकाल के समान है। किसी फ़ंक्शन के निष्पादन के समाप्त होने के बाद, चर नष्ट हो जाता है।

डिफ़ॉल्ट रूप से, कचरा मूल्य घोषणा के दौरान उन्हें सौंपा गया है।

वाक्य - विन्यास:

डेटाटाइप var_name1 [= value]

या

ऑटो डेटाटाइप var_name1 [= value]

उपरोक्त उदाहरण में, दो चर एक ही भंडारण वर्ग के साथ परिभाषित किए गए हैं। ऑटो का उपयोग केवल स्थानीय चर यानी फ़ंक्शंस में परिभाषित करने के लिए किया जा सकता है।

संग्रहण वर्ग पंजीकृत करें

जैसा कि नाम से पता चलता है, रजिस्टर वेरिएबल को घोषित करने के लिए रजिस्टर स्टोरेज क्लास का उपयोग किया जाता है। रजिस्टर वेरिएबल के सभी प्रकार्य ऑटो चर के समान हैं सिवाय इसके कि कंपाइलर इन वेरिएबल्स को माइक्रोप्रोसेसर के रजिस्टर में स्टोर करने की कोशिश करता है अगर मुफ्त रजिस्टर उपलब्ध है। यदि एक मुफ्त रजिस्टर उपलब्ध नहीं है, तो ये केवल मेमोरी में संग्रहीत होते हैं।

इस प्रकार, प्रोग्राम के रनटाइम के दौरान मेमोरी में स्टोर होने वाले अन्य वेरिएबल्स की तुलना में रजिस्टर वेरिएबल्स पर ऑपरेशन बहुत तेजी से होता है।

आमतौर पर, कुछ चर जिन्हें प्रोग्राम में बार-बार एक्सेस करने की आवश्यकता होती है, उन्हें प्रोग्राम के रनिंग टाइम को बेहतर बनाने के लिए रजिस्टर स्टोरेज क्लास के भीतर घोषित किया जाता है। पॉइंटर्स का उपयोग करके एक रजिस्टर चर का पता प्राप्त नहीं किया जा सकता है।

चर का अधिकतम आकार रजिस्टर के आकार (यानी एक शब्द लगभग) के बराबर है। इसमें एक ‘& to ऑपरेटर नहीं लगाया जा सकता, क्योंकि इसमें मेमोरी लोकेशन नहीं है।

वाक्य - विन्यास:

रजिस्टर datatype var_name1 [= value]

उदाहरण:

सेलेनियम में चौखटे के प्रकार
{रजिस्टर int pi}

'रजिस्टर' को परिभाषित करने का मतलब यह नहीं है कि चर को एक रजिस्टर में संग्रहीत किया जाएगा। इसे हार्डवेयर और कार्यान्वयन प्रतिबंधों के आधार पर एक रजिस्टर में संग्रहीत किया जा सकता है।

आइए रजिस्टर और ऑटो स्टोरेज कक्षाओं के एक उदाहरण को देखें।

उदाहरण:

# नाम का उपयोग करके नाम स्थान std // वैरिएबल घोषित करने वाले वैरिएबल // का उपयोग करके // एक इंट्यूशनल वैल्यू को x int x void autoStorageClass () {प्रिंटफ ('nDemonstrating autonnn') // को एक ऑटो वैरिएबल घोषित करने के लिए इनिशियलाइज़ किया जा सकता है (बस // लेखन 'int a = 32' समान रूप से काम करता है) int num = 32 // ऑटो वैरिएबल प्रिंट करना a 'printf (' वैरिएबल का मान 'num' 'ऑटो के रूप में घोषित:% dn', num) प्रिंटफ ( '--------------------------------')} शून्य रजिस्टरस्टेज क्लॉस () {प्रिंटफ़ ('रजिस्टरडाउन रजिस्टर करना') / / एक रजिस्टर वैरिएबल रजिस्टर की घोषणा करते हुए char c = 'G' // प्रिंटिंग वेरिएबल 'b' प्रिंटफ ('वेरिएबल वैल्यू' c '' का रजिस्टर के रूप में घोषित:% dn ', c) प्रिंटफ (' ----) ---------------------------- ')} int main () {// ऑटो स्टोरेज क्लास AutoStorageClass () // प्रदर्शित करने के लिए रजिस्टर संग्रहण कक्षा रजिस्टरस्टेज क्लॉस (वापसी 0)

आउटपुट:

आउटपुट - C ++ में स्टोरेज क्लास - एडुर्कास्थैतिक भंडारण वर्ग

स्थिर भंडारण वर्ग का उपयोग घोषणा करने के लिए किया जाता है स्थिर चर । स्थैतिक चर अपने मान (यानी अंतिम मान) को तब भी संरक्षित करते हैं, जब वे अपने दायरे से बाहर होते हैं। स्थैतिक चर केवल एक बार आरंभिक होते हैं औरकार्यक्रम की समाप्ति तक मौजूद रहें।

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

C ++ में, जब स्थैतिक का उपयोग किसी वर्ग डेटा सदस्य पर किया जाता है, तो यह उस सदस्य की केवल एक प्रति को उसके वर्ग के सभी ऑब्जेक्ट द्वारा साझा करने का कारण बनता है।

वाक्य - विन्यास:

स्थिर डेटाटाइप var_name1 [= value]

उदाहरण:

#include void function (शून्य) static int c = 5 // वैश्विक स्थिर चर मुख्य () {जबकि (c--) {function ()} वापसी 0} void function (शून्य) {static int cnt = 2 cnt ++ std :: Cout<< 'cnt is ' << cnt std::cout << ' and c is ' << c << std::endl } 

आउटपुट:

एक्सटर्नल स्टोरेज क्लास

बाहरी संग्रहण वर्ग की आवश्यकता तब होती है जब चर को कई फ़ाइलों में साझा किया जाना चाहिए। बाहरी चर में वैश्विक गुंजाइश होती है और ये चर उस फ़ाइल के बाहर दिखाई देते हैं जिसमें वे घोषित किए जाते हैं। बाहरी चर सभी कार्यक्रमों के लिए दिखाई देता है। यह प्रयोग किया जाता है अगर दो या अधिक फाइलें एक ही चर या फ़ंक्शन साझा कर रही हैं।

बाहरी चर का जीवनकाल उस कार्यक्रम के रूप में लंबे समय तक है जिसमें इसे घोषित किया गया है। एक सामान्य वैश्विक चर को किसी भी फ़ंक्शन / ब्लॉक में इसकी घोषणा / परिभाषा से पहले 'बाहरी' कीवर्ड डालकर बाहरी बनाया जा सकता है।

जब आप 'एक्सटर्नल' का उपयोग करते हैं तो वेरिएबल को इनिशियलाइज़ नहीं किया जा सकता है क्योंकि यह स्टोरेज लोकेशन पर वैरिएबल नाम को इंगित करता है जिसे पहले परिभाषित किया गया है।

वाक्य - विन्यास

जावा स्ट्रिंग स्प्लिट रेगेक्स मल्टीपल डेलिमिटर
बाहरी डेटा प्रकार var_name1

उदाहरण

#include int cnt extern void write_extern () main () {cnt = 5 write_extern ()}

दूसरी फ़ाइल: support.cpp

#include extern int cnt void write_extern (शून्य) {std :: cout<< 'Count is ' << cnt << std::endl } 

यहां, किसी अन्य फ़ाइल में cnt घोषित करने के लिए बाहरी कीवर्ड का उपयोग किया जा रहा है। अब इन दोनों फाइलों को निम्न प्रकार से & minus; संकलित करें

$ g ++ main.cpp support.cpp -o लिखना

यह लेखन निष्पादन योग्य कार्यक्रम का उत्पादन करेगा, लेखन को निष्पादित करने की कोशिश करेगा और परिणाम निम्नानुसार & minus;

$ / / लिखें

C ++ में स्टोरेज क्लास के साथ आगे बढ़ते हुए, चलो पिछले एक, यानी Mutable स्टोरेज क्लास पर एक नजर डालते हैं।

म्यूटेबल स्टोरेज क्लास

म्यूटेबल स्पेसियर केवल क्लास ऑब्जेक्ट्स पर लागू होता है, जो किसी ऑब्जेक्ट के सदस्य को कॉन्स्टेबल मेंबर फंक्शन को ओवरराइड करने की अनुमति देता है। अर्थात्, एक उत्परिवर्तित सदस्य को एक कास्ट सदस्य फ़ंक्शन द्वारा संशोधित किया जा सकता है।

अंत में, विभिन्न स्टोरेज कक्षाओं के बीच के अंतर को समझने के लिए तुलना तालिका को देखें।

भंडारण वर्ग

कीवर्ड

जीवन काल

दृश्यता

आरंभिक मूल्य

स्वचालित

ऑटो

बड़े डेटा विश्लेषण के अनुप्रयोग

फंक्शन ब्लॉक

स्थानीय

कूड़ा करकट

बाहरी

बाहरी

पूरा कार्यक्रम

ग्लोबल

शून्य

स्थिर

स्थिर

पूरा कार्यक्रम

स्थानीय

शून्य

रजिस्टर करें

रजिस्टर करें

फंक्शन ब्लॉक

स्थानीय

कूड़ा करकट

म्यूट करने योग्य

उत्परिवर्तनीय

कक्षा

स्थानीय

कूड़ा करकट

अब उपरोक्त C ++ प्रोग्राम्स के माध्यम से जाने के बाद, आप समझ गए होंगे कि C ++ में विभिन्न स्टोरेज क्लास क्या हैं और उन्हें कैसे लागू किया जाए। मुझे उम्मीद है कि यह ब्लॉग जानकारीपूर्ण है और आपके लिए मूल्य वर्धित है।

इस प्रकार हम। C ++ में संग्रहण कक्षाओं पर इस लेख के अंत में आ गए हैं।

आप और अधिक जानने के लिए चाहते हैं, तो बाहर की जाँच करें Edureka, एक विश्वसनीय ऑनलाइन शिक्षण कंपनी द्वारा। एडुर्का के जावा जे 2 ईई और एसओए प्रशिक्षण और प्रमाणन पाठ्यक्रम आपको हाइबरनेट और स्प्रिंग जैसे विभिन्न जावा फ्रेमवर्क के साथ कोर और उन्नत जावा अवधारणाओं दोनों के लिए प्रशिक्षित करने के लिए डिज़ाइन किया गया है।

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? कृपया इस ब्लॉग के टिप्पणी अनुभाग में इसका उल्लेख करें और हम जल्द से जल्द आपको वापस कर देंगे।