Imenski prostor u C ++ | Set 2 (proširenje prostora imena i neimenovani prostor imena)

Uveli smo imene prostora u nižoj setu 1.
Imenski prostor u C ++ | SET 1 (uvod)

Definiranje prostora imena:

Definicija imenovanog prostora započinje s prostorom imena ključne riječi, a slijedi ime imena na sljedeći način:

ime imena imenaspace_name 
{
// Deklaracija koda, tj. varijabla (int a;)
Metoda (void add ();)
nastava (razredni učenik {};)
}

Treba napomenuti da nakon završne narukvice nema zareza (;).
Da biste nazvali verziju funkcije s omogućenom imenom bilo koje ili varijable, pretoči naziv imena na sljedeći način:
imenaspace_name :: code;  // Kod može biti promjenjiva funkcija ili klasa.

Korištenje direktive:

Također možete izbjeći preradu prostora imena pomoću Direktive o prostoru imena. Ova direktiva kaže prevoditeljima da sljedeći kôd koristi imena u navedenom prostoru imena. 
Spas imena podrazumijeva se za sljedeći kôd:

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

Imena uvedena u korištenje direktive Poslušajte uobičajena pravila opsega. Ime je vidljivo s točke korištenja direktive do kraja opsega u kojem se nalazi direktiva. Entiteti s istim nazivom definiranim u vanjskom opsegu su skriveni.

Ugniježđeni prostori imena:

Prostori imena mogu se ugniježditi tamo gdje možete definirati jedan prostor imena unutar drugog prostora imena na sljedeći način:

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

Članovima ugniježđenog imena možete pristupiti pomoću operatora rezolucije na sljedeći način:
// pristupiti članovima imenaPace_name2
Korištenje imena imena imenaspace_name1 :: namespace_name2;
// pristupiti članovima imena prostora: name1
Korištenje imena imena imenaspace_name1;


U gornjim izjavama ako koristite imenaspace_name1, tada će to učiniti elemente imenaspace_name2 dostupnim u opsegu na sljedeći način:

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


Također je moguće stvoriti više prostora imena u globalnom prostoru. To se može učiniti na dva načina. 
 

    ime imena koji imaju različita imena  
     
CPP
   // A C++ program to show more than one namespaces    // with different names.   #include      using     namespace     std  ;   // first name space   namespace     first   {      int     func  ()     {     return     5  ;     }   }   // second name space   namespace     second   {      int     func  ()     {     return     10  ;     }   }   int     main  ()   {      // member function of namespace      // accessed using scope resolution operator      cout     &  lt  ;  &  lt  ;     first  ::  func  ()     &  lt  ;  &  lt  ;  &  quot  ;    n  &  quot  ;;         cout     &  lt  ;  &  lt  ;     second  ::  func  ()     &  lt  ;  &  lt  ;  &  quot  ;    n  &  quot  ;;         return     0  ;   }   

  • Izlaz: 
     
5 10 
    Proširenje prostora imena (koristeći isto ime dva puta)  
    Također je moguće stvoriti dva bloka prostora imena koji imaju isto ime. Drugi blok prostora imena nije ništa drugo nego zapravo nastavak prvog prostora imena. Jednostavnijim riječima, možemo reći da oba mjesta imena nisu drugačija, već su jednaka jednaka u dijelovima. 
     
CPP
   // C++ program to demonstrate namespace extension   #include      using     namespace     std  ;   // first name space   namespace     first      {         int     val1     =     500  ;      }   // rest part of the first namespace   namespace     first      {         int     val2     =     501  ;      }   int     main  ()   {      cout     &  lt  ;  &  lt  ;     first  ::  val1     &  lt  ;  &  lt  ;  &  quot  ;    n  &  quot  ;;         cout     &  lt  ;  &  lt  ;     first  ::  val2     &  lt  ;  &  lt  ;  &  quot  ;    n  &  quot  ;;         return     0  ;   }   

  • Izlaz: 
     
500 501 


Neimenovane prostore imena  
 

  • Oni su izravno upotrebljivi u istom programu i koriste se za proglašavanje jedinstvenih identifikatora.
  • U neimenovanim imenima imena imena prostora imena koji se ne spominje u deklaraciji prostora imena.
  • Naziv prostora imena jedinstveno je generirao prevoditelj.
  • Neimenovane prostore imena koje ste stvorili bit će dostupni samo u datoteci u kojoj ste ga stvorili.
  • Neimenovani prostori imena su zamjena za statičku deklaraciju varijabli.


 

CPP
   // C++ program to demonstrate working of unnamed    // namespaces   #include      using     namespace     std  ;   // unnamed namespace declaration   namespace      {      int     rel     =     300  ;      }   int     main  ()   {      cout     &  lt  ;  &  lt  ;     rel     &  lt  ;  &  lt  ;     &  quot  ;    n  &  quot  ;;     // prints 300      return     0  ;   }   

Izlaz: 
 

300