namespaces c
सरल उदाहरणों के साथ C ++ में नामस्थानों का पूरा अवलोकन।
अब तक हमारे पिछले ट्यूटोरियल्स में, हमने C ++ में उपयोग किए गए वेरिएबल्स, डिक्लेरेशन, फ़ंक्शंस और इस तरह की अन्य संस्थाओं के बारे में सब कुछ देखा है।
C ++ में एप्लिकेशन विकसित करते समय कुछ अजीबोगरीब स्थितियां उत्पन्न हो सकती हैं जैसे दो बार उपयोग किए जा रहे समान चर नाम या समान प्रोटोटाइप आदि के साथ परिभाषित कार्य जब ये परिदृश्य उत्पन्न होते हैं, तो कंपाइलर के लिए सही चर या फ़ंक्शन कॉल को कम करना मुश्किल हो जाता है जो अस्पष्टता को जन्म दे रहा है। ।
=> यहां परफेक्ट सी ++ ट्रेनिंग गाइड देखें।
आप क्या सीखेंगे:
- नाम स्थान क्या है?
- एक नाम स्थान परिभाषित करना
- Namespace सदस्यों तक पहुँचना
- का उपयोग कर निर्देश
- नेस्टेड नेमस्पेस
- बाहरी नाम स्थान
- संहित नामस्थान
- निष्कर्ष
- अनुशंसित पाठ
नाम स्थान क्या है?
नीचे देखें उदाहरण:
#include #include int main() { int var; double var; std::cin>>var; }
आउटपुट:
फ़ंक्शन में function int main () ':
8:10: त्रुटि: परस्पर विरोधी घोषणा 'डबल संस्करण'
7: 7: नोट: पिछली घोषणा ’int var’ के रूप में
उपरोक्त उदाहरण में, हमने विभिन्न प्रकारों के साथ दो चर को परिभाषित किया है लेकिन समान पहचानकर्ता। इसलिए जब हम इस उदाहरण को संकलित करते हैं, तो हमें आउटपुट विंडो में दिखाए अनुसार एक त्रुटि मिलती है। एक ही पहचानकर्ता को दो चर नाम देने के लिए इस्तेमाल किए जाने के कारण ये परस्पर विरोधी घोषणाएं होती हैं।
इस प्रकार की परिस्थितियाँ अनुप्रयोगों में अस्पष्टता को जन्म देती हैं।
C ++ कुछ कहलाता है ' नामस्थान “इस समस्या को हल करने के लिए। C ++ में नाम स्थान केवल एक पैकेज या एक क्षेत्र या एक पुस्तकालय की तरह है जो समान पहचानकर्ताओं के साथ चर या कार्यों के बीच अंतर करने के लिए उपयोग किया जाता है।
एक नेमस्पेस में चर, फ़ंक्शंस, क्लासेस या अन्य ऑब्जेक्ट और यहां तक कि एक अन्य नामस्थान हो सकते हैं। नेमस्पेस के प्रत्येक सदस्य को नेमस्पेस स्पेस का उपयोग करने के लिए संदर्भित किया जा सकता है। यह कंपाइलर को विभिन्न प्रोग्रामिंग संस्थाओं के बीच अंतर करने में मदद करता है, भले ही उनके नाम समान हों।
एक नाम स्थान परिभाषित करना
C ++ में, हम कीवर्ड का उपयोग करके एक नामस्थान को परिभाषित कर सकते हैं। नाम स्थान ' नीचे दिखाए गए रूप में:
namespace namespace_name{ namespace_declarations; }
इसलिए यदि हमें 'test_space' नामक एक नामस्थान को परिभाषित करने की आवश्यकता है, तो हम इसे नीचे के रूप में कर सकते हैं:
namespace test_space{ int var=10; }
उपरोक्त घोषणा 'टेस्ट_स्पेस' नामक एक नाम स्थान को परिभाषित करती है। जैसा कि दिखाया गया है कि इसके सदस्य के रूप में एक पूर्णांक चर संस्करण है।
Namespace सदस्यों तक पहुँचना
अब, हमने अपने स्वयं के नामस्थान 'test_space' को परिभाषित किया है और हम इस नाम स्थान की सामग्री का उपयोग कैसे करते हैं?
C ++ प्रोग्राम में, हम सिंटैक्स का उपयोग करके नामस्थान के सदस्यों तक पहुँच सकते हैं:
namespace_name::namespace_member;
इस प्रकार नामांक 'test_space' में घोषित पूर्णांक चर संस्करण निम्नानुसार एक्सेस किया जा सकता है:
test_space::var;
नामस्थान और इसके उपयोग को प्रदर्शित करने के लिए नीचे पूरा उदाहरण देखें।
#include #include namespace test_space{ int var = 10; } int main() { double var = 20.53; std::cout<<'local var = '< आउटपुट:
स्थानीय संस्करण = 20.53
test_space :: var = 10
हमने उपरोक्त प्रोग्रामिंग उदाहरण में नाम स्थान बनाने और पहुँचने के बारे में सभी का प्रदर्शन किया है। जैसा कि हम देखते हैं, 'test_space' एक ऐसा नामस्थान है जिसे हमने परिभाषित किया है। इसमें एक एकल पूर्णांक चर संस्करण परिभाषित किया गया है। फिर मुख्य फ़ंक्शन में, हमारे पास एक और डबल चर संस्करण है जिसे आरंभीकृत किया गया है।
बाद में हम इन दोनों चर को प्रदर्शित करते हैं। ध्यान दें कि मुख्य के अंदर स्थानीय डबल चर को सीधे नाम स्थान चर को मुद्रित करने के लिए मुद्रित किया जा सकता है, हमें नामस्थान नाम के साथ इसे पूर्ववर्ती करना होगा।
इसने उन नामों के कारण चरों की समस्या पर भी ध्यान दिया है, जिन नामों पर हमने पहले चर्चा की थी।
का उपयोग कर निर्देश
हमारे पिछले विषय में, हमने देखा कि हम namepace_name :: namespace_member का उपयोग करके नामस्थान सदस्यों तक पहुँच सकते हैं।
यदि हम प्रोग्राम में हर जगह एक नाम स्थान निर्दिष्ट नहीं करना चाहते हैं, तो हम “का उपयोग” कर सकते हैं का उपयोग करते हुए “कार्यक्रम में नाम स्थान शामिल करने का निर्देश।
यह अग्रानुसार होगा:
#include #include namespace test_space{ int var = 10; } using namespace std; using namespace test_space; int main() { double var = 20.53; cout<<'local var = '< आउटपुट:
स्थानीय संस्करण = 20.53
test_space :: var = 10
उपर्युक्त उदाहरण में, हमने नामस्थान 'test_space' को परिभाषित करने के बाद दो बयानों का उपयोग किया है।
ये:
using namespace std; using namespace test_space;
पहला कथन नाम स्थान 'std' तक पहुंचने की घोषणा का उपयोग करता है जो C ++ लाइब्रेरी में पूर्वनिर्धारित मानक नाम स्थान है। इस नाम स्थान का उपयोग विभिन्न कार्यों जैसे कि सिनेमा, कूट, आदि तक पहुंचने के लिए किया जाता है।
दूसरे बयान का उपयोग कार्यक्रम में 'test_space' नाम स्थान को शामिल करने के लिए किया जाता है।
मुख्य कार्य में, हम देख सकते हैं कि cout और variable var जैसे कार्यों को नामस्थान नाम से पहले की आवश्यकता नहीं है। हम सीधे उन्हें संदर्भित कर सकते हैं। लेकिन जैसा कि var का मुख्य फ़ंक्शन में एक स्थानीय चर के साथ एक नाम का टकराव है, हम इसे गुंजाइश रिज़ॉल्यूशन ऑपरेटर (: :) का उपयोग करके संदर्भित करते हैं क्योंकि नामस्थान में भी हमेशा वैश्विक गुंजाइश होती है।
नेस्टेड नेमस्पेस
C ++ भी नेस्टेड नेमस्पेस यानी किसी नेमस्पेस को किसी अन्य नामस्थान के अंदर परिभाषित करने की अनुमति देता है।
नेस्टेड नेमस्पेस का सामान्य सिंटैक्स निम्नानुसार है:
namespace ns1{ ns1_code; namespace ns2{ ns2_code; } }
अगर हमें ns2_code एक्सेस करने की आवश्यकता है, तो हम इसे इस प्रकार एक्सेस कर सकते हैं:
ns1::ns2::ns2_code;
निम्नलिखित कोड उदाहरण का उपयोग करके नेस्टेड नामस्थानों को प्रदर्शित करते हैं।
#include #include namespace first{ int var = 10; namespace second{ int secVar = 20; } } using namespace std; using namespace first; using namespace first::second; int main() { double var = 20.53; cout<<'local var = '< आउटपुट:
स्थानीय संस्करण = 20.53
पहला :: var = 10
दूसरा :: var = 20
हमने उपरोक्त कार्यक्रम में नेस्टेड नेमस्पेस का उपयोग किया है। कृपया उस तरीके पर ध्यान दें जिसमें नाम का उपयोग करने के लिए निर्देश का उपयोग किया जाता है। केवल अंतरतम नामस्थान को एक बार संदर्भित करना पर्याप्त नहीं है। अगर हमें बाहरी नामस्थान से एक कोड की आवश्यकता है, तो हमें इसे अलग से संदर्भित करने की आवश्यकता है।
हम 'उपनाम' के रूप में ज्ञात नामस्थान के लिए किसी अन्य नाम का उपयोग कर सकते हैं। नेस्टेड नेमस्पेस का उपयोग करते समय यह विशेष रूप से उपयोगी है और नेस्टिंग की डिग्री अधिक है।
हम उपरोक्त उदाहरण को संशोधित करके एक नाम स्थान के लिए अन्य प्रदर्शित कर सकते हैं।
#include #include namespace first{ int var = 10; namespace second{ int secVar = 20; } } using namespace std; using namespace first; namespace nested = first::second; int main() { double var = 20.53; cout<<'local var = '< आउटपुट:
स्थानीय संस्करण = 20.53
पहला :: var = 10
दूसरा :: var = 20
ध्यान दें कि नाम स्थान के लिए परिभाषित पहला नाम :: दूसरा। एक बार जब एक अन्य नाम परिभाषित किया जाता है, तो हम उपनाम नाम का उपयोग करके नामस्थान का उल्लेख कर सकते हैं।
बाहरी नाम स्थान
कभी-कभी जब हमारे पास हमारे आवेदन में उपयोग करने के लिए कई नामस्थान होते हैं, तो हम सभी नामस्थानों को एक अलग फ़ाइल में रखना चाहते हैं। यह आसानी से किया जा सकता है। जब नाम स्थान अलग फ़ाइल में होते हैं तो हम बस उस फ़ाइल को अपने प्रोग्राम में शामिल करते हैं और फिर सीधे हमारे प्रोग्राम में नामस्थान और उसकी सामग्री का उपयोग करते हैं।
उदाहरण के लिए, अगर हमारे पास ns.h नाम की एक फाइल है जिसमें निम्नलिखित नामस्थान हैं।
//ns.h namespace first{ int var = 25; }
अब हमारे कार्यक्रम में, हम नामस्थान 'पहले' का उपयोग इस प्रकार कर सकते हैं:
#include #include “ns.h” using namespace std; int main() { cout<इसलिए एक बार जब हम अपने प्रोग्राम में नेमस्पेस रखने वाली फाइल को शामिल कर लेते हैं, तो हम नेमस्पेस का उपयोग कर सकते हैं जैसे कि इसे उसी प्रोग्राम में ग्लोबली घोषित किया गया हो।
संहित नामस्थान
C ++ हमें किसी सन्निहित नामस्थान के रूप में परिभाषित करने की भी अनुमति देता है। समसामयिक नाम स्थान एक ही नाम होने से एक से अधिक बार परिभाषित किए गए नामस्थान हैं। वास्तव में, ये अलग नामस्थान नहीं हैं, बल्कि समान नामस्थान के विस्तार हैं।
नीचे दिए गए उदाहरण में स्पष्ट नामस्थान स्पष्ट हैं।
#include #include . namespace first{ int var = 10; } namespace first{ namespace second{ int secVar = 20; } } using namespace std; using namespace first; namespace nested = first::second; int main() { double var = 20.53; cout<<'local var = '< आउटपुट:
स्थानीय संस्करण = 20.53
चुस्त घोटाले में व्यापार विश्लेषक की भूमिका
पहला :: var = 10
दूसरा :: var = 20
उपरोक्त उदाहरण में ध्यान दें कि हमने एक ही नामस्थान को दो बार परिभाषित किया है। पहली परिभाषा में, हमारे पास एक वैरिएबल है जिसका नाम var है। जबकि दूसरी घोषणा में हमारे पास एक और नाम स्थान परिभाषित है।
मुख्य फ़ंक्शन में, हमने बाहरी सदस्यों के साथ-साथ आंतरिक नामस्थान पर भी पहुंच बनाई है और ध्यान दें कि सदस्य आसानी से एक्सेस कर रहे हैं।
यह सन्निहित नामस्थानों का उदाहरण है, जिसे कभी-कभी 'बंद नामस्थान' के रूप में भी जाना जाता है। उनकी परिभाषाएं अलग-अलग दिखाई देती हैं लेकिन वास्तव में, वे निरंतर नाम स्थान हैं।
निष्कर्ष
इसके साथ, हम C ++ में नामस्थान पर इस ट्यूटोरियल के अंत में आ गए हैं। एक तरह से नामस्थान जो हमें विभिन्न स्थानों या क्षेत्रों में हमारे कोड को अलग करने की अनुमति देता है ताकि हमें इसे पढ़ने में स्पष्टता हो और इसके सदस्यों का उपयोग करने में भी।
हमारे बाद के ट्यूटोरियल में, हम C ++ के विभिन्न मूल विषयों के बारे में अधिक जानेंगे जैसे अपवाद हैंडलिंग, फ़ाइल इनपुट / आउटपुट, आदि।
=> सी ++ प्रशिक्षण ट्यूटोरियल के ए-जेड को देखने के लिए यहां देखें।
अनुशंसित पाठ
- सर्वश्रेष्ठ मुफ्त सी # ट्यूटोरियल श्रृंखला: शुरुआती के लिए अंतिम सी # गाइड
- एचपी लोडरनर ट्यूटोरियल के साथ लोड परीक्षण
- पुस्तकालय कार्य C ++ में
- मुफ़्त के लिए सी ++ प्रोग्रामिंग जानने के लिए 70+ बेस्ट सी ++ ट्यूटोरियल
- C ++ में ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग
- प्रारंभिक सूचियाँ C ++ में
- STL में Iterators
- सी ++ में एनकैप्सुलेशन