Espai de noms a C ++ | Set 3 (accedir, crear capçalera, nidificació i aliasing)

Espai de noms a C ++ | Conjunt 1 (Introducció) Espai de noms a C ++ | Conjunt 2 (ampliació d'espai de noms i espai de noms sense nom)

Diferents maneres d’accedir a l’espai de noms: A C ++ hi ha dues maneres d’accedir a variables i funcions d’espai de noms.

Definició d'un espai de nom:

Una definició d'espai de noms comença amb l'espai de noms de paraules clau seguit del nom de l'espai de noms de la manera següent:

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

Cal destacar que no hi ha cap punt i coma (;) després de la clausura de tancament.
Per trucar a la versió habilitat per a l'espai de noms de la funció o la variable Prepend el nom de l'espai de noms de la manera següent:
nom de noms_name :: codi;  // El codi podria ser una funció o classe variable.

La directiva d'ús:

També podeu evitar la prepulsió dels espais de nom amb la Directiva de l'espai de noms. Aquesta directiva indica al compilador que el codi posterior està utilitzant noms a l'espai de noms especificat. 
L'espai de noms està implicat així per al codi següent:

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

Els noms introduïts en una directiva obeeixen regles d'abast normal. El nom és visible des del punt de la Directiva d'ús fins al final de l'abast en què es troba la directiva. Les entitats amb el mateix nom definides en un àmbit exterior estan ocultes.

Espais de noms imbricats:

Els espais de noms es poden nidificar on podeu definir un espai de noms dins d'un altre espai de nom de la següent manera:

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

Podeu accedir als membres de l'espai de noms imbricats mitjançant els operadors de resolució de la següent manera:
// per accedir als membres de nomspace_name2
Utilitzant noms d'espai namespace_name1 :: nomspace_name2;
// Per accedir als membres de l'espai de noms: nom1
Utilitzant noms d'espai de nomspace_name1;


A les afirmacions anteriors si utilitzeu nomspace_name1, farà que els elements de nomspace_name2 estiguin disponibles a l'abast de la següent 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. Camella 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  ;   }   

Sortida:

 300   

2. Directive 'Utilitzant'  

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

Sortida:

 300   

Utilitzant espai de noms en fitxers de capçalera Podem crear espai de noms en un fitxer i accedir al contingut mitjançant un altre programa. Això es fa de la manera següent.

  • Hem de crear dos fitxers. Un que conté l’espai de noms i totes les funcions de dades i membres que volem utilitzar més endavant.
  • I l’altre programa pot trucar directament al primer programa per utilitzar totes les funcions de dades i membres.

Arxiu 1  

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

Arxiu 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í podem veure que l’espai de noms es crea a File1.h i el valor () d’aquest espai de noms s’anomena a File2.cpp. Espais de noms imbricats En els espais de noms de C ++ també es poden nidificar, és a dir, un espai de noms dins d'un altre. La resolució de variables d'espai de noms és 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  ;   }   

Sortida:

 5   

Espai de noms aliasing: A C ++ podeu utilitzar un nom d'àlies per al nom de l'espai de noms per facilitar l'ús. Els espais de noms existents es poden alias amb noms nous amb la sintaxi següent:

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

Sortida:

 42   

Si us agraden els geeksforgeeks i voleu contribuir, també podeu escriure un article mitjançant write.geeksforgeeks.org O envieu el vostre article a [email protected]. Consulteu el vostre article que apareix a la pàgina principal de Geeksforgeeks i ajudeu a altres frikis.