logo

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ı:



a-b budama

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