Namnområdet i C ++ | Set 3 (åtkomst, skapa rubrik, häckning och aliasing)

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

Olika sätt att komma åt namnområdet: I C ++ finns det två sätt att få åtkomst till namnutrymmevariabler och funktioner.

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:

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

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:

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

1. Normalt sätt  

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

Output:

 300   

2. 'Använda' direktiv  

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

Produktion:

 300   

Använda namnområdet i rubrikfiler Vi kan skapa namnutrymme i en fil och få åtkomst till innehåll med ett annat program. Detta görs på följande sätt.

  • Vi måste skapa två filer. En som innehåller namnområdet och alla datamedlemmar och medlemsfunktioner vi vill använda senare.
  • Och det andra programmet kan direkt ringa det första programmet för att använda alla datamedlemmar och medlemsfunktioner i det.

Fil 1  

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

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

Här kan vi se att namnområdet skapas i fil1.h och värdet () för det namnområdet kallas in fil2.cpp. Kapslade namnutrymmen I C ++ kan namnutrymmen också kapslas, dvs ett namnområde inuti ett annat. Upplösningen av namnområdesvariabler är hierarkisk. 

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

Output:

 5   

Namnområdet aliasing: I C ++ kan du använda ett aliasnamn för ditt namnutrymme för enkel användning. Befintliga namnutrymmen kan vara alias med nya namn med följande syntax:

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

Output:

 42   

Om du gillar GeeksForgeeks och vill bidra kan du också skriva en artikel med write.geeksforgeeks.org eller maila din artikel till [email protected]. Se din artikel som visas på GeeksForgeeks huvudsida och hjälpa andra nördar.