Namespace in C++ | Set 3 (Accessing, creating header, nesting and aliasing)

1.7

Namespace in C++ | Set 1 (Introduction)
Namespace in C++ | Set 2 (Extending namespace and Unnamed namespace)

Different ways to access namespace

In C++, there are two ways of accessing namespace variables and functions.

  1. Normal way
    // C++ program to demonstrate accessing of variables
    // in normal way, i.e., using "::"
    #include <iostream>
    using namespace std;
    
    namespace geek
    {
        int rel = 300; 
    }
    
    int main()
    {
        // variable ‘rel’ accessed 
        // using scope resolution operator
        cout << geek::rel << "\n";  // prints 300
    
        return 0;
    }
    

    Output :

    300
    
  2. “using” directive
    // C++ program to demonstrate accessing of variables
    // in normal way, i.e., using "using" directive
    #include <iostream>
    using namespace std;
    
    namespace geek
    {
        int rel = 300; 
    }
    
    // use of ‘using’ directive
    using namespace geek;
    
    int main()
    {
       // variable ‘rel’ accessed 
       // without using scope resolution variable
       cout << rel << "\n";        //prints 300
      
       return 0;
    }
    

    Output:

    300
    

Using namespace in header files

We can create namespace in one file and access contents using another program. This is done in the following manner.

  • We need to create two files. One containing the namespace and all the data members and member functions we want to use later.
  • And the other program can directly call the first program to use all the data members and member functions in it.

File 1

// file1.h 
namespace foo
{
    int value() 
    { 
       return 5;    
    }
}

File 2

// file2.cpp - Not to be executed online
#include <iostream>
#include “file1.h” // Including file1
using namespace std;

int main () 
{
    cout << foo::value();
    return 0;
}

Here we can see that the namespace is created in file1.h and the value() of that namespace is getting called in file2.cpp.

Nested Namespaces

In C++, namespaces can also be nested i.e., one namespace inside another. The resolution of namespace variables is hierarchical.

// C++ program to demonstrate nesting of namespaces
#include <iostream>
using namespace std;

// Nested namespace
namespace out
{
  int val = 5; 
  namespace in
  {
      int val2 = val;    
  }
}

// Driver code
int main()
{
  cout << out::in::val2;   // prints 5
  return 0;
}

OUTPUT :

5

Namespace Aliasing

In C++, you can use an alias name for your namespace name, for ease of use. Existing namespaces can be aliased with new names, with the following syntax:

namespace new_name = current_name;
#include <iostream>

namespace name1 
{
    namespace name2 
    {
         namespace name3 
         {
             int var = 42;
         }
    }
}

// Aliasing 
namespace alias = name1::name2::name3;
 
int main()
{
    std::cout << alias::var << '\n';
}

Output :

42

This article is contributed by Abhinav Tiwari .If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.

Recommended Posts:



1.7 Average Difficulty : 1.7/5.0
Based on 11 vote(s)










Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.