Makale İçeriği
- Deklaratif Bölge ve Kapsam
- Küresel Kapsam
- Blok Kapsamı
- İşlev Kapsamı
- Numaralandırma Kapsamı
- Sınıf Kapsamı
- Şablon Parametre Kapsamı
- İsim Gizleme
- Aynı Kapsamda Tekrar Bildirim İmkanı
- Ad Alanı Kapsamı
- Farklı Kısımlarda Kapsam
- Sonuç
Deklaratif Bölge ve Kapsam
Bir bildirim bölgesi, bir varlık adının geçerli olduğu bir program metninin en büyük kısmıdır. Aynı varlığa atıfta bulunmak için niteliksiz adın kullanılabileceği (görüldüğü) bölgedir. Aşağıdaki kısa programı düşünün:
#Dahil etmekad alanı std kullanarak;
geçersiz fn()
int var = 3;
eğer (1==1)
cout<
int ana()
fn();
0 döndür;
fn() fonksiyonunun iki bloğu vardır: if-koşulu için bir iç blok ve fonksiyon gövdesi için bir dış blok. Tanımlayıcı, var, dış blokta tanıtılır ve görülür. Ayrıca cout deyimi ile iç blokta da görülmektedir. Dış ve iç bloklar, var adının kapsamıdır.
Bununla birlikte, var adı, iç blokta bir kayan nokta gibi farklı bir varlık bildirmek için hala kullanılabilir. Aşağıdaki kod bunu göstermektedir:
#Dahil etmekad alanı std kullanarak;
geçersiz fn()
int var = 3;
eğer (1==1)
kayan nokta var = 7.5;
cout<
int ana()
fn();
0 döndür;
çıktı 7.5. Bu durumda, var adı, dış blokta tanıtılan (bildirilen) 3 değerindeki tamsayıya atıfta bulunmak için artık iç blokta kullanılamaz. Bu tür iç bloklar, dış blokta bildirilen varlıklar için potansiyel kapsam olarak adlandırılır.
Not: Dış bloktaki gibi aynı türden bir varlık, iç blokta hala bildirilebilir. Ancak bu durumda iç blokta geçerli olan yeni bildirim ve anlamı iken, eski bildirim ve iç blok dışındaki anlamı dış blokta geçerliliğini korur.
Bir iç blokta aynı adı taşıyan bir bildirim, normalde bu iç bloğun dışında aynı adı taşıyan bildirimi geçersiz kılar. İç bloklar diğer iç blokları yuvalayabilir.
Küresel Kapsam
Bir programcı bir dosya yazmaya başladığında, bu genel kapsamdır. Aşağıdaki kısa program bunu göstermektedir:
#Dahil etmekad alanı std kullanarak;
kayan nokta var = 9.4;
int ana()
cout <cout <<::var<<'\n';
0 döndür;
Çıktı:
9.4
9.4
Bu durumda, var için bildirim bölgesi veya kapsamı, var için bildirim noktasından başlar, dosyanın sonuna kadar aşağı doğru devam eder (çeviri birimi).
main() işlevinin bloğu farklı bir kapsamdır; küresel kapsam için iç içe geçmiş bir kapsamdır. Global kapsamın bir varlığına farklı bir kapsamdan erişmek için, tanımlayıcı doğrudan veya öncesinde kapsam çözümleme operatörü kullanılır: .
Not: main() varlığı, global kapsamda da bildirilir.
Blok Kapsamı
if, while, do, for veya switch ifadelerinin her biri bir blok tanımlayabilir. Böyle bir ifade bileşik bir ifadedir. Bir blokta bildirilen bir değişkenin adı, bir bloğun kapsamına sahiptir. Kapsamı, beyan noktasında başlar ve bloğunun sonunda biter. Aşağıdaki kısa program, ident değişkeni için bunu göstermektedir:
#Dahil etmekad alanı std kullanarak;
int ana()
eğer (1==1)
/*bazı ifadeler*/
int kimlik = 5;
cout<
0 döndür;
Blok kapsamında bildirilen ident gibi bir değişken yerel bir değişkendir.
Blok kapsamı dışında ve üzerinde bildirilen bir değişken bloğun başlığında görülebilir (e.g., if bloğu için koşul) ve ayrıca blok içinde. Aşağıdaki kısa program, identif değişkeni için bunu göstermektedir:
#Dahil etmekad alanı std kullanarak;
int ana()
int tanım = 8;
eğer (tanım == 8)
cout<
0 döndür;
çıktı 8. Burada iki blok kapsamı vardır: main() işlevi için blok ve iç içe if-bileşik ifadesi. İç içe blok, main() fonksiyon bloğunun potansiyel kapsamıdır.
Bir blok kapsamında tanıtılan bir bildirim bloğun dışında görülemez. Derlemeyen aşağıdaki kısa program bunu variab değişkeni ile göstermektedir:
#Dahil etmekad alanı std kullanarak;
int ana()
eğer (1 == 1)
int değişken = 15;
cout<
Derleyici, değişken için bir hata mesajı üretir.
Bileşik işlevin başlığında tanıtılan, bildirilen bir varlık, bileşik ifadenin dışında (aşağıda) görülemez. Aşağıdaki for-loop kodu derlenmeyecek ve bir hata mesajıyla sonuçlanacaktır:
#Dahil etmekad alanı std kullanarak;
int ana()
for (int i=0; ben<4; ++i)
cout<
cout<0 döndür;
Yineleme değişkeni, i, for-loop bloğunun içinde görülür ancak for-loop bloğunun dışında görülmez.
İşlev Kapsamı
Fonksiyon bloğunda bir fonksiyon parametresi görülüyor. Bir fonksiyon bloğunda bildirilen bir varlık, bildirim noktasından fonksiyon bloğunun sonuna kadar görülür. Aşağıdaki kısa program bunu göstermektedir:
#Dahil etmek#Dahil etmek
ad alanı std kullanarak;
dizge fn(dize dizgi)
char stri[] = "muz";
/*diğer ifadeler*/
string toplamStr = str + stri;
dönüş totalStr;
int ana()
string totStr = fn("yemek ");
cout<
Çıktı:
muz yemek
Not: Fonksiyonun dışında (üzerinde) bildirilen bir varlık, fonksiyon parametre listesinde ve ayrıca fonksiyon bloğunda görülebilir.
Etiket
Bir etiketin kapsamı, içinde göründüğü işlevdir. Aşağıdaki kod bunu göstermektedir:
#Dahil etmekad alanı std kullanarak;
geçersiz fn()
etikete git;
/*diğer ifadeler*/
labl: int inte = 2;
cout<
int ana()
fn();
0 döndür;
çıktı 2.
Numaralandırma Kapsamı
Kapsamsız Numaralandırma
Aşağıdaki if bloğunu göz önünde bulundurun:
numaralandırma a, b, c=b+2;
cout<
çıktı 0 1 3.
Bloktaki ilk satır bir numaralandırmadır, a, b ve c onun numaralandırıcılarıdır. Bir numaralandırıcının kapsamı, bildirim noktasından numaralandırmanın çevreleyen bloğunun sonuna kadar başlar.
Aşağıdaki ifade derlenmeyecektir çünkü c'nin bildirim noktası a'nınkinden sonradır:
numaralandırma a=c+2, b, c;Numaralandırıcılara, numaralandırmanın çevreleyen bloğundan sonra erişildiğinden, aşağıdaki kod kesimi derlenmeyecektir:
eğer (1==1)numaralandırma a, b, c=b+2;
cout<Yukarıdaki numaralandırma kapsamsız bir numaralandırma olarak tanımlanır ve numaralandırıcıları kapsamsız numaralandırıcılar olarak tanımlanır. Bunun nedeni, yalnızca ayrılmış sözcük olan enum ile başlamasıdır. enum sınıfı veya enum yapısı ile başlayan numaralandırmalar, kapsamlı numaralandırmalar olarak tanımlanır. Numaralandırıcıları kapsamlı numaralandırıcılar olarak tanımlanır.
Kapsamlı Numaralandırma
Aşağıdaki ifade tamam:
Bu, kapsamlı bir numaralandırma örneğidir. Sınıfın adı nam. Burada, numaralandırıcının kapsamı, bildirim noktasından numaralandırma tanımının sonuna kadar başlar, numaralandırma için çevreleyen bloğun sonu değil. Aşağıdaki kod derlenmeyecek:
eğer (1==1)enum sınıfı adı a, b, c=b+2;
cout<
Sınıf Kapsamı
Normal kapsam belirlemede, bildirimsel bölge bir noktadan başlar, sonra devam eder ve farklı bir noktada durur. Kapsam tek bir sürekli bölgede var. Sınıfla, bir varlığın kapsamı, birbirine bağlı olmayan farklı bölgelerde olabilir. İç içe bloklar için kurallar hala geçerlidir. Aşağıdaki program bunu göstermektedir:
#Dahil etmekad alanı std kullanarak;
//Temel sınıf
sınıf Cla
özel:
int meP = 5;
korumalı:
int mePro = 9;
halka açık:
geçersiz fn()
cout<
;
//Türetilmiş sınıf
sınıf DerCla: genel Cla
halka açık:
int derMem = memPro;
;
int ana()
Kla nesnesi;
nesne.fn();
DerCla derObj;
cout<
Çıktı:
5
9
Cla sınıfında, memP değişkeni, bildirim noktasında görülür. Bundan sonra, "korumalı"nın kısa kısmı atlanır, ardından sınıf üyesi fonksiyon bloğunda tekrar görülür. Türetilmiş sınıf atlanır, ardından main() işlev kapsamında (blok) tekrar görülür.
Cla sınıfında, memPro değişkeni, bildirim noktasında görülür. Genel işlevin fn() kısmı atlanır, ardından türetilmiş sınıf açıklama bloğunda görülür. main() işlevinde tekrar aşağıda görülür.
Kapsam Çözünürlük Operatörü
C++'daki kapsam çözümleme operatörü :: . Sınıfın statik bir üyesine erişmek için kullanılır. Aşağıdaki program bunu göstermektedir:
ad alanı std kullanarak;
sınıf Cla
halka açık:
statik int const mem = 5;
halka açık:
statik boşluk fn()
cout<
;
int ana()
cout<
0 döndür;
Çıktı:
5
5
Statik üyeler, kapsam çözümleme operatörü kullanılarak erişilen main() fonksiyon bloğunda görülür.
Şablon Parametre Kapsamı
Bir şablon parametre adının normal kapsamı, aşağıdaki kodda olduğu gibi, bildirim noktasından bloğunun sonuna kadar başlar:
şablonT John = 11;
U Peter = 12.3;
T Mary = 13;
U Sevinç = 14.6;
;
U ve T blok içinde görülüyor.
Bir şablon işlevi prototipi için, kapsam, aşağıdaki ifadede olduğu gibi, bildirim noktasından işlev parametre listesinin sonuna kadar başlar:
şablonAncak, sınıf tanımına (tanım) gelince, kapsam aşağıdaki kodda olduğu gibi farklı kısımlarda da olabilir:
#Dahil etmekad alanı std kullanarak;
şablon
halka açık:
T sayısı;
statik U ch;
void func (U cha, const char *str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
statik boşluk eğlencesi (U ch)
if (ch == 'a')
cout << "Official static member function" << '\n';
;
int ana()
TheCla
nesne.sayı = 12;
nesne.func('$', "500");
0 döndür;
İsim Gizleme
Aynı nesne türünün adı iç içe geçmiş bir blokta yeniden bildirildiğinde ad gizleme örneği oluşur. Aşağıdaki program bunu göstermektedir:
#Dahil etmekad alanı std kullanarak;
geçersiz fn()
int var = 3;
eğer (1==1)
int var = 4;
cout<
cout<
int ana()
fn();
0 döndür;
Çıktı:
4
3
Bunun nedeni, iç içe bloktaki var'ın dış bloktaki var'ı gizlemesidir.
Aynı Kapsamda Tekrar Bildirim İmkanı
Bildirgenin amacı, adın (ilk kez) kapsamına girdiği yerdir.
Fonksiyon Prototipi
Farklı varlıklar, hatta farklı türler bile normalde aynı kapsamda bildirilemez. Ancak, bir fonksiyon prototipi aynı kapsamda birden çok kez bildirilebilir. İki fonksiyon prototipi ve karşılık gelen fonksiyon tanımına sahip aşağıdaki program bunu göstermektedir:
ad alanı std kullanarak;
void fn(int sayı);
void fn(int sayı);
void fn(int num)
cout<
int ana()
fn(5);
0 döndür;
Program çalışır.
Aşırı yüklenmiş fonksiyonlar
Aşırı yüklenmiş işlevler, aynı ada sahip ancak farklı işlev imzalarına sahip işlevlerdir. Başka bir istisna olarak, aynı isimde aşırı yüklenmiş fonksiyonlar aynı kapsamda tanımlanabilir. Aşağıdaki program bunu göstermektedir:
ad alanı std kullanarak;
void fn(int num)
cout<
void fn(şamandıra no)
cout<
int ana()
fn(5);
yüzer flt = 8.7;
fn(flt);
0 döndür;
Çıktı:
5
8.7
Aşırı yüklenmiş fonksiyonlar global kapsamda tanımlanmıştır.
Ad Alanı Kapsamı
Ad Alanı Kapsamı kendi makalesini hak ediyor. Söz konusu yazı bu web sitesi için yazılmıştır, linuxhint.com. Bu sitenin (sayfa) arama kutusuna “Ad Alanı Kapsamı” arama kelimelerini yazmanız ve Tamam'ı tıklamanız yeterlidir; makaleyi alacaksınız.
Farklı Kısımlarda Kapsam
Sınıf, kapsamın farklı bölümlerde olabileceği tek şema değildir. Arkadaş belirteci, ayrıntılı tip belirtecinin belirli kullanımları ve kullanım yönergeleri, kapsamın farklı yerlerde olduğu diğer şemalardır - ayrıntılar için daha sonra bakın.
Sonuç
Kapsam, bildirime dayalı bir bölgedir. Bir bildirim bölgesi, bir varlık adının geçerli olduğu bir program metninin en büyük kısmıdır. İç içe bloklar gibi belirli programlama şemalarına göre birden fazla bölüme ayrılabilir. Bildirim noktasına sahip olmayan kısımlar potansiyel kapsamı oluşturur. Potansiyel kapsam beyana sahip olabilir veya olmayabilir.