C++'da ad alanı | Küme 2 (Ad alanını genişletme ve Adsız ad alanı)

Aşağıdaki set 1'de ad alanlarını tanıttık.
C++'da Ad Alanı | Set 1 (Giriş)

Bir Ad Alanının Tanımlanması:

Bir ad alanı tanımı, aşağıdaki gibi ad alanı anahtar sözcüğüyle ve ardından ad alanı adıyla başlar:

ad alanı  namespace_name 
{
// kod bildirimleri, yani değişken  (int a;)
yöntem (geçersiz ekleme();)
sınıflar ( sınıf öğrencisi{};)
}

Kapanış parantezinden sonra noktalı virgül (;) bulunmadığına dikkat edilmelidir.
İşlev veya değişkenin ad alanı etkin sürümünü çağırmak için ad alanı adının başına şu şekilde ekleyin:
ad alanı_adı: :kod;  // kod değişken fonksiyon veya sınıf olabilir.

Kullanma direktifi:

Ayrıca, kullanma ad alanı yönergesiyle ad alanlarının başına eklenmesini de önleyebilirsiniz. Bu yönerge derleyiciye sonraki kodun belirtilen ad alanındaki adları kullandığını bildirir. 
Dolayısıyla ad alanı aşağıdaki kod için ima edilmiştir:

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

Bir kullanma yönergesinde tanıtılan adlar normal kapsam kurallarına uyar. Ad, kullanım yönergesinin bulunduğu noktadan, yönergenin bulunduğu kapsamın sonuna kadar görünür. Dış kapsamda tanımlanan aynı ada sahip varlıklar gizlenir.

İç İçe Ad Alanları:

Ad alanları, bir ad alanını başka bir ad alanı içinde aşağıdaki gibi tanımlayabileceğiniz şekilde iç içe yerleştirilebilir:

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

İç içe ad alanının üyelerine aşağıdaki gibi çözümleme işleçlerini kullanarak erişebilirsiniz:
// namespace_name2 üyelerine erişmek için
ad alanı kullanılıyor ad alanı_adı1::adalanı_adı2;
// ad alanı:isim1 üyelerine erişmek için
ad alanı kullanılarak ad alanı_adı1;


Yukarıdaki ifadelerde namespace_name1 kullanıyorsanız, namespace_name2 öğelerini aşağıdaki gibi kapsamda kullanılabilir hale getirecektir:

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


Global alanda birden fazla ad alanı oluşturmak da mümkündür. Bu iki şekilde yapılabilir. 
 

    farklı adlara sahip ad alanları  
     
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  ;   }   

  • Çıkış: 
     
5 10 
    Ad alanlarının genişletilmesi (Aynı adın iki kez kullanılması)  
    Aynı ada sahip iki ad alanı bloğu oluşturmak da mümkündür. İkinci ad alanı bloğu aslında ilk ad alanının devamından başka bir şey değildir. Daha basit bir deyişle, parçalar halinde tanımlanan her iki ad alanının da farklı olmadığını, aslında aynı olduğunu söyleyebiliriz. 
     
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  ;   }   

  • Çıkış: 
     
500 501 


Adsız Ad Alanları  
 

  • Aynı programda doğrudan kullanılabilirler ve benzersiz tanımlayıcıları bildirmek için kullanılırlar.
  • Adsız ad alanlarında, ad alanı bildiriminde ad alanının adı belirtilmemiştir.
  • Ad alanının adı derleyici tarafından benzersiz bir şekilde oluşturulur.
  • Oluşturduğunuz adsız ad alanlarına yalnızca onu oluşturduğunuz dosyadan erişilebilir.
  • Adsız ad alanları, değişkenlerin statik bildiriminin yerine geçer.


 

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

Çıkış: 
 

300