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

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
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // 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;
    }

    chevron_right

    
    

    Output :

    300
    
  2. “using” directive
    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // 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;
    }

    chevron_right

    
    

    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

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


File 2

filter_none

edit
close

play_arrow

link
brightness_4
code

// file2.cpp - Not to be executed online
#include <iostream>
#include “file1.h” // Including file1
using namespace std;
  
int main () 
{
    cout << foo::value();
    return 0;
}

chevron_right


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.

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


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;
filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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.



My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


8


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