Naamruimte in C++ | Set 3 (Toegang verkrijgen, header aanmaken, nesten en aliasing)

Naamruimte in C++ | Set 1 (inleiding) Naamruimte in C++ | Set 2 (naamruimte en naamruimte uitbreiden)

Verschillende manieren om toegang te krijgen tot de naamruimte: In C++ zijn er twee manieren om toegang te krijgen tot naamruimtevariabelen en -functies.

Een naamruimte definiëren:

Een naamruimtedefinitie begint als volgt met het trefwoord naamruimte, gevolgd door de naamruimtenaam:

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

Opgemerkt moet worden dat er geen puntkomma (;) achter de accolade sluiten staat.
Om de naamruimteversie van een functie of variabele aan te roepen, plaatst u de naam van de naamruimte als volgt:
naamruimtenaam: :code;  // code kan een variabele functie of klasse zijn.

De gebruiksrichtlijn:

U kunt ook voorkomen dat naamruimten worden voorafgegaan door de instructie 'using namespace'. Deze richtlijn vertelt de compiler dat de volgende code gebruik maakt van namen in de opgegeven naamruimte. 
De naamruimte wordt dus geïmpliceerd voor de volgende code:

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

Namen die in een gebruiksrichtlijn worden geïntroduceerd, voldoen aan de normale reikwijdteregels. De naam is zichtbaar vanaf het punt van de gebruiksrichtlijn tot het einde van het bereik waarin de richtlijn zich bevindt. Entiteiten met dezelfde naam gedefinieerd in een buitenste bereik zijn verborgen.

Geneste naamruimten:

Naamruimten kunnen worden genest, waarbij u als volgt een naamruimte binnen een andere naamruimte kunt definiëren:

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

U kunt als volgt toegang krijgen tot leden van een geneste naamruimte door resolutie-operatoren te gebruiken:
// om toegang te krijgen tot leden van naamruimte_naam2
naamruimte naamruimte_naam1::naamruimte_naam2 gebruiken;
// om toegang te krijgen tot leden van naamruimte:naam1
naamruimte naamruimte_naam1 gebruiken;


Als u in de bovenstaande instructies naamruimte_naam1 gebruikt, worden elementen van naamruimte_naam2 als volgt beschikbaar in het bereik:

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. Normale manier  

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

Uitgang:

 300   

2. 'gebruik'-richtlijn  

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

Uitgang:

 300   

Naamruimte gebruiken in headerbestanden We kunnen een naamruimte in één bestand creëren en toegang krijgen tot de inhoud met een ander programma. Dit gebeurt op de volgende manier.

  • We moeten twee bestanden maken. Eén met de naamruimte en alle gegevensleden en lidfuncties die we later willen gebruiken.
  • En het andere programma kan het eerste programma rechtstreeks aanroepen om alle gegevensleden en lidfuncties daarin te gebruiken.

Bestand 1  

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

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

Hier kunnen we zien dat de naamruimte is gemaakt in file1.h en dat de waarde() van die naamruimte wordt aangeroepen in file2.cpp. Geneste naamruimten In C++ kunnen naamruimten ook worden genest, d.w.z. de ene naamruimte in de andere. De resolutie van naamruimtevariabelen is hiërarchisch. 

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

UITGANG:

 5   

Naamruimte-aliasing: In C++ kunt u voor uw gebruiksgemak een aliasnaam gebruiken voor uw naamruimtenaam. Bestaande naamruimten kunnen worden voorzien van een alias met nieuwe namen met de volgende syntaxis:

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

Uitgang:

 42   

Als je GeeksforGeeks leuk vindt en een bijdrage wilt leveren, kun je ook een artikel schrijven met schrijf.geeksforgeeks.org of mail uw artikel naar [email protected]. Zie uw artikel verschijnen op de hoofdpagina van GeeksforGeeks en help andere Geeks.