Sadržaj članka
- Deklarativna regija i opseg
- Globalni opseg
- Opseg bloka
- Opseg funkcije
- Opseg popisa
- Opseg razreda
- Opseg parametra predloška
- Skrivanje imena
- Mogućnost ponavljanja deklaracije u istom opsegu
- Opseg prostora imena
- Opseg u različitim dijelovima
- Zaključak
Deklarativna regija i opseg
Deklarativna regija najveći je dio programskog teksta u kojem vrijedi naziv entiteta. To je regija u kojoj se nekvalificirani naziv može koristiti (vidjeti) za upućivanje na isti entitet. Razmotrite sljedeći kratki program:
#includepomoću prostora imena std;
void fn ()
int var = 3;
ako (1 == 1)
cout<
int main ()
fn ();
return 0;
Funkcija fn () ima dva bloka: unutarnji blok za uvjet if i vanjski blok za tijelo funkcije. Identifikator, var, uveden je i vidljiv u vanjskom bloku. Također se vidi u unutarnjem bloku, s izjavom o coutu. Vanjski i unutarnji blok opseg su imena, var.
Međutim, ime, var, i dalje se može koristiti za deklariranje drugog entiteta, poput float-a u unutarnjem bloku. Sljedeći kod to ilustrira:
#includepomoću prostora imena std;
void fn ()
int var = 3;
ako (1 == 1)
plutajuća var = 7.5;
cout<
int main ()
fn ();
return 0;
Izlaz je 7.5. U ovom slučaju, naziv var više se ne može koristiti u unutarnjem bloku za upućivanje na cijeli broj vrijednosti 3, koji je uveden (deklariran) u vanjskom bloku. Takvi se unutarnji blokovi nazivaju potencijalnim opsegom za entitete deklarirane u vanjskom bloku.
Napomena: Entitet istog tipa, poput onog vanjskog bloka, još uvijek se može deklarirati u unutarnjem bloku. Međutim, u ovom slučaju ono što vrijedi u unutarnjem bloku je nova deklaracija i njezino značenje, dok stara deklaracija i njezino značenje izvan unutarnjeg bloka ostaju valjani u vanjskom bloku.
Deklaracija istog imena u unutarnjem bloku obično nadjačava istoimenu deklaraciju izvan tog unutarnjeg bloka. Unutarnji blokovi mogu ugnijezditi druge unutarnje blokove.
Globalni opseg
Kad programer tek počne tipkati datoteku, to je globalni opseg. Sljedeći kratki program to ilustrira:
#includepomoću prostora imena std;
plutajuća var = 9.4;
int main ()
cout <cout <<::var<<'\n';
return 0;
Izlaz je:
9.4
9.4
U ovom slučaju, deklarativno područje ili opseg za var započinje od točke deklaracije za var, nastavlja se prema dolje do kraja datoteke (jedinica za prijevod).
Blok funkcije main () različitog je opsega; to je ugniježđeno područje za globalni opseg. Za pristup entitetu globalnog opsega iz drugog opsega, identifikator se koristi izravno ili mu prethodi operator razlučivanja opsega, :: .
Napomena: Entitet, main (), također je deklariran u globalnom opsegu.
Opseg bloka
Izraz if, while, do, for ili switch može definirati svaki blok. Takva je izjava složena izjava. Ime varijable deklarirane u bloku ima opseg bloka. Njegov opseg započinje na mjestu deklaracije i završava na kraju bloka. Sljedeći kratki program to ilustrira za varijablu ident:
#includepomoću prostora imena std;
int main ()
ako (1 == 1)
/ * neke izjave * /
int ident = 5;
cout<
return 0;
Varijabla, poput ident, deklarirana u opsegu bloka, lokalna je varijabla.
Varijabla deklarirana izvan opsega bloka i iznad nje može se vidjeti u zaglavlju bloka (npr.g., uvjet za if-block) i također unutar bloka. Sljedeći kratki program to ilustrira za varijablu, identif:
#includepomoću prostora imena std;
int main ()
int identif = 8;
ako (identif == 8)
cout<
return 0;
Izlaz je 8. Ovdje postoje dva opsega bloka: blok za glavnu () funkciju i ugniježđeni if-complex izraz. Ugniježđeni blok je potencijalni opseg glavnog () funkcijskog bloka.
Deklaracija unesena u opseg bloka ne može se vidjeti izvan bloka. Sljedeći kratki program, koji se ne kompajlira, to ilustrira varijablom variab:
#includepomoću prostora imena std;
int main ()
ako (1 == 1)
int varijab = 15;
cout<
Prevodnik stvara poruku pogreške za variab.
Uvedeni entitet, deklariran u zaglavlju složene funkcije, ne može se vidjeti izvan (ispod) složenog izraza. Sljedeći kôd for-loop neće se prevesti, što rezultira porukom o pogrešci:
#includepomoću prostora imena std;
int main ()
za (int i = 0; i<4; ++i)
cout<
cout<return 0;
Varijabla iteracije, i, vidi se unutar for-loop bloka, ali ne i izvan for-loop bloka.
Opseg funkcije
Funkcijski parametar se vidi u funkcijskom bloku. Entitet deklariran u funkcijskom bloku vidi se od točke deklaracije do kraja funkcijskog bloka. Sljedeći kratki program to ilustrira:
#include#include
pomoću prostora imena std;
niz fn (niz str)
char stri [] = "banane";
/ * ostale izjave * /
niz totalStr = str + stri;
povratak totalStr;
int main ()
niz totStr = fn ("jesti");
cout<
Izlaz je:
jedući banane
Napomena: Entitet deklariran izvan funkcije (iznad nje) može se vidjeti na popisu parametara funkcije, a također i u funkcijskom bloku.
Označiti
Opseg oznake je funkcija u kojoj se pojavljuje. Sljedeći kod to ilustrira:
#includepomoću prostora imena std;
void fn ()
ići na labl;
/ * ostale izjave * /
labl: int inte = 2;
cout<
int main ()
fn ();
return 0;
Izlaz je 2.
Opseg popisa
Nekopirano popisivanje
Razmotrite sljedeći if-block:
nabrajati a, b, c = b + 2;
cout<
Izlaz je 0 1 3.
Prvi redak u bloku je nabrajanje, a, b i c su njegovi popisivači. Opseg popisivača započinje od točke deklaracije do kraja priloženog bloka popisivanja.
Sljedeća se izjava neće sastaviti jer je točka deklaracije c iza točke a:
nabrojati a = c + 2, b, c;Sljedeći segment koda neće se kompajlirati jer se popisivačima pristupa nakon priloženog bloka nabrajanja:
ako (1 == 1)nabrajati a, b, c = b + 2;
cout<Gornje nabrajanje opisano je kao nekontrolirano nabrajanje, a njegovi popisivači kao neograničeno nabrajanje. To je zato što započinje samo rezerviranom riječi enum. Nabrajanja koja počinju s enum klasom ili enum strukturom opisuju se kao opsežne enumeracije. Njihovi popisivači opisani su kao popisivači s opsegom.
Opseg popisivanja
Sljedeća izjava je u redu:
Ovo je primjer popisa s opsegom. Naziv klase je nam. Ovdje opseg popisivača počinje od točke deklaracije do kraja definicije popisivanja, a ne od kraja priloženog bloka za nabrajanje. Sljedeći kod se neće kompajlirati:
ako (1 == 1)enum klasa nam a, b, c = b + 2;
cout<
Opseg razreda
Normalnim opsegom, deklarativno područje započinje od točke, a zatim se nastavlja i zaustavlja u drugoj točki. Opseg postoji u jednoj kontinuiranoj regiji. S klasom opseg entiteta može biti u različitim regijama koje nisu spojene. Pravila za ugniježđene blokove i dalje vrijede. Sljedeći program to ilustrira:
#includepomoću prostora imena std;
// Osnovna klasa
razred Cla
privatni:
int memP = 5;
zaštićen:
int memPro = 9;
javnost:
void fn ()
cout<
;
// Izvedena klasa
razred DerCla: javni Cla
javnost:
int derMem = memPro;
;
int main ()
Cla obj;
obj.fn ();
DerCla derObj;
cout<
Izlaz je:
5
9
U klasi Cla, na mjestu deklaracije vidi se varijabla memP. Nakon toga, kratki dio "zaštićenog" se preskače, a zatim ponovno vidi u funkcijskom bloku člana klase. Izvedena klasa se preskače, a zatim ponovno vidi u opsegu funkcije main () (blok).
U klasi Cla, varijabla memPro, vidi se na mjestu deklaracije. Dio javne funkcije fn () preskače se, a zatim vidi u izvedenom bloku opisa klase. To se ponovno vidi dolje u main () funkciji.
Operator za razlučivanje opsega
Operator razlučivosti opsega na C ++ je: . Koristi se za pristup statičnom članu klase. Sljedeći program to ilustrira:
pomoću prostora imena std;
razred Cla
javnost:
statički int const mem = 5;
javnost:
statička praznina fn ()
cout<
;
int main ()
cout<
return 0;
Izlaz je:
5
5
Statični članovi vide se u glavnom () funkcijskom bloku, kojem se pristupa pomoću operatora razlučivanja opsega.
Opseg parametra predloška
Uobičajeni opseg imena parametra predloška započinje od točke deklaracije do kraja njegovog bloka, kao u sljedećem kodu:
predložakT Ivan = 11;
U Petru = 12.3;
T Marija = 13;
U Radost = 14.6;
;
U i T se vide unutar bloka.
Za prototip funkcije predloška, opseg započinje od točke deklaracije do kraja popisa parametara funkcije, kao u sljedećoj izjavi:
predložakMeđutim, što se tiče opisa klase (definicije), opseg također može biti različitih dijelova kao u sljedećem kodu:
#includepomoću prostora imena std;
predložak
javnost:
T broj;
statički U ch;
void func (U cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
zabava u statičkoj praznini (U ch)
ako (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
TheCla
obj.num = 12;
obj.func ('$', "500");
return 0;
Skrivanje imena
Primjer skrivanja imena događa se kada se ime iste vrste objekta ponovno deklarira u ugniježđenom bloku. Sljedeći program to ilustrira:
#includepomoću prostora imena std;
void fn ()
int var = 3;
ako (1 == 1)
int var = 4;
cout<
cout<
int main ()
fn ();
return 0;
Izlaz je:
4
3
To je zato što je var u ugniježđenom bloku sakrio var u vanjskom bloku.
Mogućnost ponavljanja deklaracije u istom opsegu
Poanta deklaracije je mjesto gdje se ime (prvi put) uvodi u svoj opseg.
Prototip funkcije
Različiti entiteti, čak i različitih vrsta, obično se ne mogu prijaviti u istom opsegu. Međutim, prototip funkcije može se deklarirati više puta u istom opsegu. Sljedeći program s dva prototipa funkcije i odgovarajućom definicijom funkcije to ilustrira:
pomoću prostora imena std;
praznina fn (int num);
praznina fn (int num);
praznina fn (int broj)
cout<
int main ()
fn (5);
return 0;
Program radi.
Preopterećene funkcije
Preopterećene funkcije su funkcije s istim imenom, ali različitim potpisima funkcija. Kao još jedna iznimka, preopterećene funkcije s istim imenom mogu se definirati u istom opsegu. Sljedeći program to ilustrira:
pomoću prostora imena std;
praznina fn (int broj)
cout<
praznina fn (plutajući br)
cout<
int main ()
fn (5);
float flt = 8.7;
fn (flt);
return 0;
Izlaz je:
5
8.7
Preopterećene funkcije definirane su u globalnom opsegu.
Opseg prostora imena
Opseg imena zaslužuje vlastiti članak. Spomenuti članak napisan je za ovu web stranicu, linuxhint.com. Jednostavno upišite riječi za pretraživanje "Opseg prostora imena" u okvir za pretraživanje ove stranice (stranice) i kliknite U redu i dobit ćete članak.
Opseg u različitim dijelovima
Klasa nije jedina shema u kojoj opseg može biti u različitim dijelovima. Specifikator prijatelja, određene primjene razrađenog specifikatora tipa i direktive using druge su sheme u kojima je opseg na različitim mjestima - detalje pogledajte kasnije.
Zaključak
Opseg je deklarativna regija. Deklarativna regija najveći je dio programskog teksta u kojem vrijedi naziv entiteta. Može se podijeliti na više dijelova u skladu s određenim programskim shemama, poput ugniježđenih blokova. Dijelovi koji nemaju točku deklaracije čine potencijalni opseg. Potencijalni opseg može ili ne mora sadržavati izjavu.