C++ Ad Alanı

C Namespace



C++'daki bir ad alanı, genelleştirilmiş bir kapsamdır. Bildirimi, ayrılmış sözcük, ad alanı ile başlar, ardından programcının tercih ettiği bir ad ve ardından parantez içindeki blok. Blok, C++ nesnelerinin, işlevlerin ve diğer varlıkların temel bildirimlerini ve/veya tanımlarını içerir.

Aşağıdaki programda global kapsamda aşağıdaki iki skaler ifadeyi göz önünde bulundurun:







#Dahil etmek
ad alanı std kullanarak;

intdeğişken= 5;
batmadan yüzmekdeğişken= 2.3;

intana()
{

dönüş 0;
}

Bu programı derlemeye çalışmak bir derleme hatasına yol açar. Aynı isimde iki değişken var, değişken . İki farklı türden iki farklı değişken olmalarına rağmen, int ve batmadan yüzmek , derleyici aynı ada sahip oldukları için iki bildirimi reddeder. Aşağıdaki program, aynı ada sahip değişkenleri iki farklı genelleştirilmiş kapsamda bildirerek bu sorunu çözmektedir:



#Dahil etmek
ad alanı std kullanarak;

ad alanı NA
{
intdeğişken= 5;
}

ad alanı NB
{
batmadan yüzmekdeğişken= 2.3;
}

intana()
{
maliyet<<NA::değişken << ' ';
maliyet<<not::değişken << ' ';

dönüş 0;
}

Çıktı aşağıdaki gibidir:



5
2.3

Yukarıdaki programda iki ad alanı vardır: NA bir tamsayı tanımına sahip olan ve not bir kayan nokta tanımına sahip ancak NA için tamsayı ile aynı ada sahip olan . Son olarak program çalıştırıldığında iki farklı değişken için aynı isim kullanılmıştır. İki farklı değişkenin aynı adına erişmek için, ad alanı için özel adın ve ardından ortak tanımlayıcının kullanılması gerektiğini unutmayın. Ad alanı adı ve ortak tanımlayıcı, kapsam çözümleme operatörüyle ayrılır, :: . Ad alanlarının adı nesneleri farklılaştıracaktır.





Bu makale, bir ad alanının temel kavramını ve C++ programlama dilinde kullanımını kapsar. Bu makaleyi takip etmek için, temel C++ dili bilgisine sahip olmalısınız. Bu makalede kısaca açıklanmasına rağmen, C++ kapsamı hakkında da bilgi sahibi olmalısınız. C++ kapsamı hakkında daha fazla bilgi edinmek için, herhangi bir linuxhint.com web sayfasının arama kutusunda Kapsam C++ (tırnak işaretleri olmadan) ifadesini arayın ve Enter'a basın. Bu sizi bu yazarın yazdığı makaleye götürecektir.

Makale İçeriği

Ad Alanı nedir?

Bir bildirim bölgesi, bir varlığın (değişken) adının geçerli olduğu bir programın en büyük parçasıdır. Bu bölgeye kapsam denir. C++'daki bir ad alanı, asıl amacı ad çakışmalarını çözmek olan genelleştirilmiş bir kapsamdır. Bir ad alanı, varlıkların temel bildirimlerine ve/veya tanımlarına sahiptir.



Küresel Ad Alanı ve Sorunu

Global ad alanı, global kapsamdır. Aşağıdaki kısa programı düşünün:

#Dahil etmek
ad alanı std kullanarak;

intkimlik= 55;
batmadan yüzmekkimlik= 12.17;

intana()
{

dönüş 0;
}

Yukarıdaki programda, her ikisi de olarak adlandırılan iki değişken vardır. kimlik . Bu değişkenler global kapsamdadır; yani, küresel ad alanındadırlar. Bu programı derleme girişimi bir hata mesajıyla başarısız olur. Global kapsam, aynı ada sahip birden fazla değişkeni kabul etmez, bu nedenle özel bir ad alanına ihtiyaç vardır.

Özel Ad Alanı

Bir ad alanının yalnızca bir adı yoktur. Bunun yerine, bir ad alanı, diğer ad kümeleriyle çakışmayı önlemek için bir ad kümesine sahiptir. Kodun alt kısmında çakışmayı önlemek için, her adın önüne ad alanının adı ve :: . Aşağıdaki program, bunu iki özel ad alanı kullanarak gösterir:

#Dahil etmek
ad alanı std kullanarak;

ad alanı NA
{
intvarInt= 6;
batmadan yüzmekflt;
}

ad alanı NB
{
intvarInt= 7;
batmadan yüzmekflt;
}

intana()
{
maliyet<<NA::varInt << ' ';
maliyet<<not::varInt << ' ';
NA::flt = 2.5;
not::flt = 4.8;
maliyet<<NA::flt << ' ';
maliyet<<not::flt << ' ';

dönüş 0;
}

Çıktı:

6
7
2.5
4.8

isimleri not edin NA::flt ve not::flt sonuçta tanımlanmış ana() işlev. C++, global kapsamda böyle bir tanıma izin vermez.

Özel ad alanının, genel ad alanı için iç içe bir ad alanı olduğuna dikkat edin.

kullanma Direktifi

Ad alanını bildirdikten sonra yalnızca ad yerine her zaman namepace::name yazmaktan kaçınmak için, kullanarak direktif. Kullanılacak sözdizimi kullanarak direktif aşağıdaki gibidir:

ad alanını kullanma;

NS kullanarak yönerge bir önişlemci yönergesi değildir, bu nedenle noktalı virgül (;) ile biter.

Aşağıdaki program, aşağıdakilerin kullanımını göstermektedir: kullanarak yönerge ve daha fazlası:

#Dahil etmek
ad alanı std kullanarak;

ad alanı NB
{
intvarInt= 7;
intişlev()
{
dönüşvarInt;
}
}

intfn()
{
ad alanı NB'yi kullanma;
intmyVar2=işlev();
//NB'den gelen diğer nesneler ve işlevler bunu takip eder.
dönüşmyVar2;
}

intmyVar3=not::işlev();

intana()
{
maliyet<<fn() << '' <<myVar3<< ' ';

dönüş 0;
}

Bu programın çıktısı 7 7 . Dönem ad alanı NB kullanarak; başlangıcına yerleştirildi fn() tanım. NS işlev () NB ad alanından, öncesinde olmadan, bunun hemen altında çağrılır. Not:: .

Global kapsamda (global namespace) bildirilen bir değişken, bildirim noktasından dosyanın sonuna kadar görülür. Ayrıca iç içe ad alanlarında (iç içe kapsamlar), örneğin iç içe geçmiş ad alanlarında da görülür. fn() Yukarıdaki fonksiyon kapsamı. NS kullanarak yönerge, ad alanını yerleştirildiği konumdan yerleştirildiği kapsamın sonuna kadar birleştirir.

İsim işlev () NB ad alanından aşağıda görülemez fn() tanım çünkü ad alanı NB kullanarak; fonksiyon kapsamına (blok) yerleştirildi. Bu koşul altında kullanmak için işlev () NB ad alanı bloğunun (kapsam) dışında, öncesinde Not:: , aşağıdaki açıklamada olduğu gibi:

intmyVar3=not::işlev();

NS kullanarak yönergesi, kendi ad alanını, yerleştirildiği konumdan dış yuvalama ad alanının sonuna kadar dış yuvalama ad alanıyla birleştirir. Aşağıdaki programda, NA ad alanı global ad alanı ile birleştirilir. Her iki ad alanı daha sonra fn() NB ad alanı ile birleştirildikleri işlev tanımı ad alanı. NB ad alanı, fn() işlev tanımı ve önceki iki ad alanı dosyanın sonuna kadar devam eder (kodu baştan sona okuyun).

#Dahil etmek
ad alanı std kullanarak;

ad alanı NA
{
intvarInt= 6;
intişlev()
{
dönüşvarInt;
}

}

ad alanı NB
{
intvarInt= 7;
intişlev()
{
dönüşvarInt;
}
}

NA ad alanını kullanma;
intmyVar0=varInt;
// :: ve NB'den gelen diğer nesneler ve işlevler.

intfn()
{
intmyVar1=varInt;
ad alanı NB'yi kullanma;
intmyVar2=not::işlev();
// bu kapsamın sonuna kadar NB'den diğer nesneler ve işlevler gelir.
dönüşmyVar1+myVar2;
}

//Yalnızca :: ve NB'den gelen nesneler ve işlevler izler.

intmyVar3=not::işlev();

intana()
{
maliyet<<myVar0<< '' <<fn() << '' <<myVar3<< ' ';

dönüş 0;
}

çıktı 6, 13, 7 .

Not: Genel ad alanı ile gösterilir :: , takip eden kapsam çözümleme operatöründen önce hiçbir şey olmadığı anlamına gelir.

Açıklamanın altında, NA ad alanını kullanarak; global ve NA ad alanlarından değişkenler, kaynak ad alanlarının belirtilmeden kullanılabilir. Bir sonraki ifade kullanır varInt NA ad alanının. Global ve NA birleşik ad alanı bölgesi, fn() işlev ad alanı. Böylece varInt ilk açıklamanın fn() işlev kapsamı, NA ad alanındadır.

Global ve NA ad alanları için bölge, fn() kapsamından sonra, int myVar2 = NB::func(); , NB ad alanındaki herhangi bir ad yalnızca fn() öncesinde olmadan kapsam Not:: , yalnızca NA ve global ad alanlarında (bloklarda) oluşmadıysa. Aksi takdirde, önce olmalıdır Not:: . NA ve global için birleşik ad alanlarının bölgesi, fn() tanımı ve içine ana() dosyanın sonuna kadar çalışır.

NB ad alanının uzantısı şuradan başlar: int myVar2 = NB::func(); içinde fn() blok ve sonunda biter fn() tanım bloğu.

Not: Bölgeleri birleştirilen ad alanları, yine de çakışmaya neden olacağından, farklı ad alanı bloklarında aynı değişken adına sahip olmamalıdır.

Ad Alanı Bölgeleri

Ad alanı bir kapsamdır. Genel ad alanı (genel kapsam) dışında, herhangi bir ad alanı bir blokta bildirilmelidir. Bu blok, ad alanının muhtemelen dağıtılmış bölgelerinin ilk kısmıdır. using yönergesi ile ad alanı, diğer kapsamlarda bölgeler olarak genişletilebilir.

Bir ad alanı gövdesinde bildirilen varlıkların ad alanının üyeleri olduğu söylenir ve bu bildirimler tarafından ad alanının bildirimsel bölgesine tanıtılan adların ad alanının üye adları olduğu söylenir.

İç İçe Ad Alanları

Aşağıdaki program iç içe ad alanlarını gösterir:

#Dahil etmek
ad alanı std kullanarak;

ad alanı A
{
intben= 1;
ad alanı B
{
intben= 2;
ad alanı C
{
intben= 3;
}
}
}

intana()
{
maliyet<<İLE::ben << '' <<İLE::B::ben << '' <<İLE::B::C::ben << ' ';

dönüş 0;
}

Çıktı:

1 2 3

Kapsam çözümleme operatörü kullanılarak üç değere erişildiğine dikkat edin.

Standart Ad Alanı

C++, standart kitaplık adı verilen bir kitaplığa sahiptir. Bu kitaplıktaki nesnelerin, işlevlerin ve diğer varlıkların adları, standart ad alanı adı verilen bir ad alanındandır ve şu şekilde yazılmıştır: saat . Standart kitaplık alt kitaplıkları içerir ve bu alt kitaplıklardan biri iostream . NS iostream kütüphane nesneyi içerir maliyet , sonuçları konsola (terminal) göndermek için kullanılır.

İsim maliyet içinde olmalı saat ad alanı. Kullanmak iostream onunla saat namespace, program aşağıdaki gibi olmalıdır:

#Dahil etmek
ad alanı std kullanarak;

kullanımına dikkat edin. kullanarak direktif ve saat . Dönem #Dahil etmek bir önişlemci yönergesidir ve noktalı virgülle bitmez. Yönergesi konumunda iostream dosyasını içerir.

Çözüm

Ad alanı bir kapsamdır. Ad alanı açıklaması (tanım), C++ nesnelerinin, işlevlerinin ve diğer varlıkların temel bildirimlerini ve/veya tanımlarını içerir. Ad alanı tanımının dışında, isme sözdizimi ile erişilebilir, ad alanıAdı::ad . Genel ad alanı (genel kapsam) dışında, herhangi bir ad alanı bir blokta bildirilmelidir. Bu blok, ad alanının muhtemelen dağıtılmış bölgelerinin ilk kısmıdır. İle kullanarak yönergesine göre, ad alanı diğer kapsamlardaki bölgeler olarak genişletilebilir. Bölgeleri birleştirilen ad alanları, farklı ad alanı bloklarında aynı değişken adına sahip olmamalıdır, çünkü bu yine de ad çakışmasına neden olur.

Chrys