Espacio de nombres en C++ | Conjunto 3 (Acceso, creación de encabezado, anidamiento y alias)

Espacio de nombres en C++ | Conjunto 1 (Introducción) Espacio de nombres en C++ | Conjunto 2 (espacio de nombres extendido y espacio de nombres sin nombre)

Diferentes formas de acceder al espacio de nombres: En C++ hay dos formas de acceder a variables y funciones del espacio de nombres.

Definiendo un espacio de nombres:

Una definición de espacio de nombres comienza con la palabra clave espacio de nombres seguida del nombre del espacio de nombres de la siguiente manera:

 namespace  namespace_name    
{
// code declarations i.e. variable  (int a;)
method (void add();)
classes ( class student{};)
}

Cabe señalar que no hay punto y coma (;) después de la llave de cierre.
Para llamar a la versión habilitada para espacios de nombres de una función o variable, anteponga el nombre del espacio de nombres de la siguiente manera:
nombre_espacio_nombre: :código;  // el código podría ser una función o clase variable.

La directiva de uso:

También puede evitar anteponer espacios de nombres con la directiva de espacio de nombres. Esta directiva le dice al compilador que el código posterior utiliza nombres en el espacio de nombres especificado. 
Por tanto, el espacio de nombres está implícito en el siguiente código:

C++
   #include          using     namespace     std  ;   // first name space   namespace     first_space   {      void     func  ()      {      cout      < <     'Inside first_space'      < <     endl  ;      }   }   // second name space   namespace     second_space   {      void     func  ()      {      cout      < <     'Inside second_space'      < <     endl  ;      }   }   using     namespace     first_space  ;   int     main     ()   {      // This calls function from first name space.      func  ();      return     0  ;   }   

Los nombres introducidos en una directiva de uso obedecen a reglas de alcance normales. El nombre es visible desde el punto de la directiva de uso hasta el final del alcance en el que se encuentra la directiva. Las entidades con el mismo nombre definidas en un ámbito externo están ocultas.

Espacios de nombres anidados:

Los espacios de nombres se pueden anidar donde puede definir un espacio de nombres dentro de otro espacio de nombres de la siguiente manera:

 namespace namespace_name1    
{
  // code declarations
  namespace namespace_name2 
  {
     // code declarations
  }
}

Puede acceder a los miembros del espacio de nombres anidado utilizando operadores de resolución de la siguiente manera:
// para acceder a los miembros de namespace_name2
usando el espacio de nombres namespace_name1::namespace_name2;
// para acceder a los miembros del espacio de nombres:nombre1
usando el espacio de nombres namespace_name1;


En las declaraciones anteriores, si está utilizando namespace_name1, los elementos de namespace_name2 estarán disponibles en el alcance de la siguiente manera:

C++
   #include          using     namespace     std  ;   // first name space   namespace     first_space   {      void     func  ()      {      cout      < <     'Inside first_space'      < <     endl  ;      }      // second name space      namespace     second_space      {      void     func  ()      {      cout      < <     'Inside second_space'      < <     endl  ;      }      }   }   using     namespace     first_space  ::  second_space  ;   int     main     ()   {      // This calls function from second name space.      func  ();          return     0  ;   }   

1. forma normal  

CPP
   // C++ program to demonstrate accessing of variables   // in normal way i.e. using '::'   #include      using     namespace     std  ;   namespace     geek   {      int     rel     =     300  ;      }   int     main  ()   {      // variable ‘rel’ accessed       // using scope resolution operator      cout     &  lt  ;  &  lt  ;     geek  ::  rel     &  lt  ;  &  lt  ;     &  quot  ;    n  &  quot  ;;     // prints 300      return     0  ;   }   

Producción :

 300   

2. directiva 'usando'  

CPP
   // C++ program to demonstrate accessing of variables   // in normal way i.e. using 'using' directive   #include      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     &  lt  ;  &  lt  ;     rel     &  lt  ;  &  lt  ;     &  quot  ;    n  &  quot  ;;     //prints 300          return     0  ;   }   

Producción:

 300   

Usar espacio de nombres en archivos de encabezado Podemos crear un espacio de nombres en un archivo y acceder al contenido usando otro programa. Esto se hace de la siguiente manera.

  • Necesitamos crear dos archivos. Uno que contiene el espacio de nombres y todos los miembros de datos y funciones miembro que queremos usar más adelante.
  • Y el otro programa puede llamar directamente al primer programa para utilizar todos los miembros de datos y funciones miembro que contiene.

Archivo 1  

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

Archivo 2  

CPP
   // file2.cpp - Not to be executed online   #include      #include file1.h   // Including file1   using     namespace     std  ;   int     main     ()      {      cout     &  lt  ;  &  lt  ;     foo  ::  value  ();      return     0  ;   }   

Aquí podemos ver que el espacio de nombres se crea en file1.h y el valor() de ese espacio de nombres se llama en file2.cpp. Espacios de nombres anidados En C++, los espacios de nombres también se pueden anidar, es decir, un espacio de nombres dentro de otro. La resolución de las variables del espacio de nombres es jerárquica. 

CPP
   // C++ program to demonstrate nesting of namespaces   #include      using     namespace     std  ;   // Nested namespace   namespace     out   {      int     val     =     5  ;         namespace     in      {      int     val2     =     val  ;         }   }   // Driver code   int     main  ()   {      cout     &  lt  ;  &  lt  ;     out  ::  in  ::  val2  ;     // prints 5      return     0  ;   }   

PRODUCCIÓN :

 5   

Alias ​​de espacio de nombres: En C++ puede utilizar un nombre de alias para el nombre de su espacio de nombres para facilitar su uso. Los espacios de nombres existentes pueden tener alias con nombres nuevos con la siguiente sintaxis:

 namespace new_name = current_name;   
CPP
   #include      namespace     name1      {      namespace     name2         {      namespace     name3         {      int     var     =     42  ;      }      }   }   // Aliasing    namespace     alias     =     name1  ::  name2  ::  name3  ;       int     main  ()   {      std  ::  cout     &  lt  ;  &  lt  ;     alias  ::  var     &  lt  ;  &  lt  ;     'n'  ;   }   

Producción :

 42   

Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando escribir.geeksforgeeks.org o envíe su artículo por correo a [email protected]. Vea que su artículo aparezca en la página principal de GeeksforGeeks y ayude a otros Geeks.