C++ Namespaces

Introduction to C++ Namespaces

मान लीजिये किसी project पर एक से अधिक programmers काम कर रहे है, तो ऐसा हो सकता है की कोई दो programmers same नाम की classes या functions create कर दे। इस situation में जब सभी programmers के code को एक साथ execute किया जाएगा तो same नाम की classes या functions होने की वजह से project में error आ जायेगी। इस situation से बचने के लिए C++ आपको namespace का feature provide करती है।

एक namespace identifiers, variables, functions और classes के लिए container का काम करता है। C++ की जो standard library है उसे भी namespace के रूप में ही define किया गया है। इस namespace का नाम std होता है, और ये आपको standard processing के लिए functions और classes provide करता है। इसलिए ही आप program में इस namespace को use करते है।

C++ आपको खुद के namespaces define करने और उन्हें अपने program में use करने की capability provide करती है। Namespaces की मदद से आप code को separate कर पाते है इससे code को manage करने में आसानी हो जाती है और errors भी नहीं आती है।

Defining C++ Namespaces

Namespaces define करने के लिए आप namespace keyword use करते है। इसका general syntax निचे दिया जा रहा है।

namespace Namespace-Name
{
      //Variables, functions, classes
}

जैसा की आप ऊपर दिए गए syntax में देख सकते है namespace keyword के बाद एक unique namespace name दिया जाता है। इसके बाद आप block में variables, functions और classes define कर सकते है। इसका उदाहरण निचे दिया जा रहा है।

namespace BHTSapce
{
     void show(int num)
     {
          cout<<"Number is : "<<num;
     }
}

ऊपर दिए गए उदाहरण में BHTSpace नाम से एक namespace create किया गया है। इस namespace में show नाम का function create किया गया जो एक integer argument लेता है और उसे display करता है।

Using C++ Namespaces

किसी भी namespace के variables, functions और classes को अपने program में use करने के लिए सबसे पहले आप compiler को बताते है की आप किस namespace को अपने program में use करने वाले है। ऐसा आप using namespace keywords के द्वारा करते है। इसका general syntax निचे दिया जा रहा है।

using namespace Namespace-Name;

जैसा की आप ऊपर दिए गए syntax में देख सकते है सबसे पहले using keyword define किया जाता है, उसके बाद namespace keyword और फिर उस namespace का नाम आता है जिसे आप program में use करना चाहते है। उदाहरण के लिए मान लीजिये आप ऊपर create किये गए BHTNamespace को अपने program में use करना चाहते है तो इसके लिए आप इस प्रकार namespace को use करेंगे।

using namespace BHTNamespace;

Namespaces को generally header files में define किया जाता है। जब आप using keyword द्वारा किसी namespace को use करते है तो उसके members को आप बिना किसी operator के access कर पाते है। लेकिन यदि आप ये तरीका use ना करें तो scope resolution (::) operator के द्वारा भी किसी namespace से उसके members को access कर सकते है। इसका general syntax निचे दिया जा रहा है।

namespace-name :: member-name;

उदाहरण के लिए यदि आप ऊपर define किये गए namespace के show function को access करना चाहते है तो ऐसा आप इस प्रकार कर सकते है।

BHTSpace :: show(25);

ऊपर दिए गए उदाहरण में BHTSpace namespace के show() function को scope resolution operator द्वारा access किया गया है। ऐसा करना तब ही संभव हो सकता है जब namespace भी आपने उसी file में create किया हो जिसमें आप उसे use करना चाहते है।

Example (C++ Namespaces)

C++ namespaces को निचे एक complete उदाहरण द्वारा समझाया जा रहा है।

#include <iostream>
using namespace std;

namespace BHTNamespace
{
     void show(int num)
     {
           cout<<"Number is : "<<num;
     }
}

int main()
{
    BHTNamespace::show(5);
    return 0;
}

ऊपर दिया गया program निचे दिया output generate करता है।

Number is : 5

ऊपर दिए गए उदाहरण को using keyword द्वारा इस प्रकार लिखा जायेगा।

#include <iostream>
using namespace std;

namespace BHTNamespace
{
    void show(int num)
    {
        cout<<"Number is : "<<num;
    }
}

using namespace BHTNamespace;
int main()
{
    show(5);
    return 0;
}

जैसा की आप ऊपर दिए गए उदाहरण में देख सकते है जब आप using keyword के द्वारा किसी namespace को use करते है तो आपको उसके members को access करने के लिए scope resolution (::) operator की आवश्यकता नहीं पड़ती है। ये program निचे दिया गया output generate करता है।

Number is : 5

Nested C++ Namespaces

आप चाहे तो एक namespace के अंदर दूसरा namespace भी create कर सकते है। ऐसा आप classes और functions को और भी deep level पर separate करने के लिए कर सकते है। इसका general syntax निचे दिया जा रहा है।

namespace outerNamespace
{

    //members of outer namespace
    namespace innerNamespace
    {
         //members of inner namespace
    }
}

किसी inner namespace के members को access करने के लिए आप outer namespace के साथ scope resolution operator use करेंगे। इसका syntax निचे दिया जा रहा है।

using namespace outerNamespace::innerNamespace;

आइये अब इसे एक उदाहरण से समझने का प्रयास करते है।

#include <iostream>
using namespace std;

namespace oNamespace
{
     namespace iNamespace
     {
          void show(int num)
          {
               cout<<"Number is : "<<num;
          }
     }
}

using namespace oNamespace::iNamespace;
int main()
{
   show(5);
   return 0;
}

ऊपर दिया गया program निचे दिया गया output generate करता है।

Number is : 5