Spațiu de nume în C ++ | Set 3 (accesarea, crearea antetului, cuibăritului și aliasingului)

Spațiu de nume în C ++ | Setul 1 (Introducere) Spațiu de nume în C ++ | Set 2 (extinderea spațiului de nume și a spațiului de nume fără nume)

Diferite moduri de a accesa spațiul de nume: În C ++ există două moduri de accesare a variabilelor și funcțiilor spațiului de nume.

Definirea unui spațiu de nume:

O definiție a spațiului de nume începe cu spațiul de nume de cuvinte cheie urmat de numele spațiului de nume după cum urmează:

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

Se remarcă faptul că nu există niciun punct și virgulă (;;) după blocajul de închidere.
Pentru a apela la versiunea cu spațiu de nume a funcției sau a variabilei, preparați numele spațiului de nume după cum urmează:
NAGESPACE_NAME :: cod;  // codul ar putea fi funcție sau clasă variabilă.

Directiva de utilizare:

De asemenea, puteți evita prepararea spațiilor de nume cu Directiva Utilizare a spațiului de nume. Această directivă spune compilatorului că codul ulterior utilizează nume în spațiul de nume specificat. 
Spațiul de nume este astfel implicat pentru următorul cod:

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

Numele introduse într -o Directiva care utilizează regulile de aplicare normală. Numele este vizibil din punctul de utilizare a directivei până la sfârșitul domeniului de aplicare în care se găsește directiva. Entitățile cu același nume definit într -un domeniu exterior sunt ascunse.

Spații de nume cuibărite:

Spațiile de nume pot fi cuibărite acolo unde puteți defini un spațiu de nume în interiorul unui alt spațiu de nume după cum urmează:

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

Puteți accesa membrii spațiului de nume cuibărit folosind operatori de rezoluție după cum urmează:
// pentru a accesa membrii namespace_name2
Utilizarea spațiului de nume NAVESPACE_NAME1 :: NAGESPACE_NAME2;
// pentru a accesa membrii spațiului de nume: nume1
utilizarea spațiului de nume NAVESPACE_NAME1;


În declarațiile de mai sus, dacă utilizați namespace_name1, atunci va pune la dispoziție elemente de namespace_name2 în domeniul de aplicare după cum urmează:

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

Ieșire:

 300   

2. Directiva „Utilizarea”  

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

Ieșire:

 300   

Utilizarea spațiului de nume în fișierele antetului Putem crea spațiu de nume într -un fișier și conținut de acces folosind un alt program. Acest lucru se face în felul următor.

  • Trebuie să creăm două fișiere. Unul care conține spațiul de nume și toți membrii datelor și funcțiile de membru pe care dorim să le folosim mai târziu.
  • Iar celălalt program poate apela direct primul program care a utilizat toți membrii datelor și funcțiile membrilor din acesta.

Fișier 1  

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

Fișier 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  ;   }   

Aici putem vedea că spațiul de nume este creat în File1.h, iar valoarea () din acel spațiu de nume este apelat în file2.cpp. Spații de nume cuibărite În spațiile de nume C ++ pot fi, de asemenea, cuibărite, adică un spațiu de nume în interiorul altuia. Rezoluția variabilelor spațiului de nume este ierarhică. 

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

Ieșire:

 5   

Aliasing spațiu de nume: În C ++ puteți utiliza un nume alias pentru numele spațiului dvs. de nume pentru o ușurință de utilizare. Spațiile de nume existente pot fi aliase cu nume noi cu următoarea sintaxă:

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

Ieșire:

 42   

Dacă vă place geeksforgeeks și doriți să contribuiți, puteți scrie și un articol folosind write.geeksforgeeks.org Sau trimiteți-vă articolul la revizuirea-g-e-greeksforgeeks.org. Consultați articolul dvs. care apare pe pagina principală Geeksforgeeks și ajutați alți geeki.