Namnområdet i C ++ | Set 2 (utökade namnområdet och namngivet namnområde)

Vi har introducerat namnutrymmen i nedanstående uppsättning 1.
Namnområdet i C ++ | Set 1 (introduktion)

Definiera ett namnområde:

En definition av namnområdet börjar med nyckelordens namnområde följt av namnområdet på följande sätt:

namnutrymme namnutrymme_name 
{
// Koddeklarationer, dvs variabel (int a;)
Metod (void add ();)
Klasser (klasstudent {};)
}

Det bör noteras att det inte finns någon semikolon (;) efter den avslutande staget.
För att ringa den namnutrymme-aktiverade versionen av antingen funktion eller variabel förbereda namnutrymmet på följande sätt:
NAMESPACE_NAME :: kod;  // Kod kan vara variabel funktion eller klass.

Det användande direktivet:

Du kan också undvika att förbereda namnutrymmen med namnutrymmet. Detta direktiv berättar för kompilatorn att den efterföljande koden använder namn i det angivna namnområdet. 
Namnområdet är således underförstått för följande kod:

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

Namn som introducerats i ett som använder direktivet följer regler för normala omfattning. Namnet är synligt från punkten för att använda direktivet till slutet av omfattningen som direktivet finns. Enheter med samma namn som definieras i ett yttre omfattning är dolda.

Kapslade namnutrymmen:

Namnområden kan kapslas där du kan definiera ett namnområde i ett annat namnutrymme enligt följande:

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

Du kan komma åt medlemmar i kapslade namnområden genom att använda upplösningsoperatörer enligt följande:
// för att få åtkomst till medlemmar i namnutrymmet_name2
Använda namnutrymme NAMESPACE_NAME1 :: NAMESPACE_NAME2;
// för att få åtkomst till medlemmar i namnområdet: NAME1
Använda namnutrymme Namespace_Name1;


I ovanstående uttalanden om du använder namnutrymme_name1 kommer det att göra element av namnutrymme_name2 tillgängliga i omfattningen enligt följande:

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


Det är också möjligt att skapa mer än ett namnutrymme i det globala utrymmet. Detta kan göras på två sätt. 
 

    namnutrymmen har olika namn  
     
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  ;   }   

  • Produktion: 
     
5 10 
    Utöka namnutrymmen (med samma namn två gånger)  
    Det är också möjligt att skapa två namnutrymme som har samma namn. Det andra namnutrymmet är ingenting men faktiskt fortsättningen av första namnområdet. Med enklare ord kan vi säga att båda namnutrymmen inte är olika men faktiskt samma som definieras i delar. 
     
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  ;   }   

  • Produktion: 
     
500 501 


Namnlösa namnutrymmen  
 

  • De är direkt användbara i samma program och används för att förklara unika identifierare.
  • I namngivna namnutrymmen namnet på namnområdet i inte nämnt i deklarationen av namnområdet.
  • Namnet på namnområdet genereras unikt av kompilatorn.
  • De namngivna namnutrymmen du har skapat kommer bara att vara tillgänglig i den fil du skapade den i.
  • Namnlösa namnutrymmen är ersättningen för den statiska variablens deklaration.


 

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

Produktion: 
 

300