Raksta saturs
- Deklaratīvais reģions un darbības joma
- Globālā darbības joma
- Bloķēt darbības jomu
- Funkcijas darbības joma
- Uzskaitīšanas joma
- Klases darbības joma
- Veidnes parametru tvērums
- Vārds slēpjas
- Iespēja atkārtot deklarāciju tajā pašā darbības jomā
- Vārdamvietas darbības joma
- Darbības joma dažādās daļās
- Secinājums
Deklaratīvais reģions un darbības joma
Deklaratīvs reģions ir lielākā programmas teksta daļa, kurā ir derīgs entītijas nosaukums. Tas ir reģions, kurā nekvalificēto nosaukumu var izmantot (redzēt), lai atsauktos uz to pašu entītiju. Apsveriet šādu īsu programmu:
# iekļautizmantojot nosaukumvietu std;
anulēt fn ()
int var = 3;
ja (1 == 1)
cout<
int main ()
fn ();
atgriešanās 0;
Funkcijai fn () ir divi bloki: iekšējais bloks nosacījumam if-nosacījums un ārējais bloks funkcijas ķermenim. Identifikators var tiek ievadīts un redzams ārējā blokā. Tas ir redzams arī iekšējā blokā ar cout paziņojumu. Ārējie un iekšējie bloki ir gan nosaukuma darbības joma, var.
Tomēr nosaukumu var var joprojām izmantot, lai deklarētu citu entītiju, piemēram, pludiņu iekšējā blokā. Šis kods ilustrē to:
# iekļautizmantojot nosaukumvietu std;
anulēt fn ()
int var = 3;
ja (1 == 1)
pludiņš var = 7.5;
cout<
int main ()
fn ();
atgriešanās 0;
Rezultāts ir 7.5. Šajā gadījumā nosaukumu var, iekšējā blokā vairs nevar izmantot, lai atsauktos uz 3. vērtības veselu skaitli, kas tika ieviests (deklarēts) ārējā blokā. Šādi iekšējie bloki tiek dēvēti par potenciālo darbības jomu vienībām, kas deklarētas ārējā blokā.
Piezīme. Tā paša veida entītiju, tāpat kā ārējo bloku, joprojām var deklarēt iekšējā blokā. Tomēr šajā gadījumā iekšējā blokā ir derīga jaunā deklarācija un tās nozīme, savukārt vecā deklarācija un tās nozīme ārpus iekšējā bloka paliek spēkā ārējā blokā.
Tā paša nosaukuma deklarācija iekšējā blokā parasti ignorē tā paša nosaukuma deklarāciju ārpus šī iekšējā bloka. Iekšējie bloki var ievietot citus iekšējos blokus.
Globālā darbības joma
Kad programmētājs tikko sāk rakstīt failu, tā ir globālā darbības joma. To ilustrē šāda īsa programma:
# iekļautizmantojot nosaukumvietu std;
pludiņš var = 9.4;
int main ()
cout <cout <<::var<<'\n';
atgriešanās 0;
Rezultāts ir:
9.4
9.4
Šajā gadījumā var deklaratīvais reģions vai darbības joma sākas ar var deklarēšanas punktu, turpinās uz leju līdz faila beigām (tulkošanas vienība).
Main () funkcijas bloks ir atšķirīgs tvērums; tā ir ligzdota globālās darbības joma. Lai piekļūtu globālā tvēruma entītijai no citas darbības jomas, identifikatoru izmanto tieši vai pirms tā ir darbības jomas izšķiršanas operators: .
Piezīme: Entītija main () tiek deklarēta arī globālajā darbības jomā.
Bloķēt darbības jomu
Katrs paziņojums if, kamēr, do, for vai switch var definēt bloku. Šāds apgalvojums ir salikts apgalvojums. Blokā deklarētā mainīgā nosaukumam ir bloka darbības joma. Tās darbības joma sākas deklarēšanas brīdī un beidzas bloka beigās. Šī mainīgā programma identiski parāda šo īso programmu:
# iekļautizmantojot nosaukumvietu std;
int main ()
ja (1 == 1)
/ * daži apgalvojumi * /
int ident = 5;
cout<
atgriešanās 0;
Mainīgais, piemēram, ident, kas deklarēts bloka darbības jomā, ir lokāls mainīgais.
Mainīgais, kas deklarēts ārpus bloka darbības jomas un virs tā, ir redzams bloka galvenē (piemēram,.g., if-block nosacījums) un arī blokā. Šī īsā programma to ilustrē mainīgajam identif:
# iekļautizmantojot nosaukumvietu std;
int main ()
int identif = 8;
ja (identif == 8)
cout<
atgriešanās 0;
Rezultāts ir 8. Šeit ir divi bloku tvērumi: bloks galvenajai () funkcijai un ligzdotais ja-salikums. Ligzdots bloks ir galvenā () funkciju bloka iespējamā darbības joma.
Deklarāciju, kas ieviesta bloka darbības jomā, nevar redzēt ārpus bloka. Šī īsā programma, kas nav apkopota, to ilustrē ar mainīgo mainīgo:
# iekļautizmantojot nosaukumvietu std;
int main ()
ja (1 == 1)
int mainīgais = 15;
cout<
Sastādītājs sagatavo kļūdas ziņojumu mainīgajam.
Ievietotā entītija, kas deklarēta saliktas funkcijas galvenē, nav redzama ārpus (zemāk) saliktā paziņojuma. Šis cilpa kods netiks apkopots, kā rezultātā tiks parādīts kļūdas ziņojums:
# iekļautizmantojot nosaukumvietu std;
int main ()
par (int i = 0; i<4; ++i)
cout<
cout<atgriešanās 0;
Iterācijas mainīgais i ir redzams for-loop bloka iekšpusē, bet ne ārpus for-loop bloka.
Funkcijas darbības joma
Funkcijas parametrs ir redzams funkciju blokā. Funkciju blokā deklarētā entītija ir redzama no deklarēšanas punkta līdz funkciju bloka beigām. To ilustrē šāda īsa programma:
# iekļaut# iekļaut
izmantojot nosaukumvietu std;
virkne fn (virkne str)
char stri [] = "banāni";
/ * citi paziņojumi * /
virkne totalStr = str + stri;
return totalStr;
int main ()
virkne totStr = fn ("ēd");
cout<
Rezultāts ir:
ēd banānus
Piezīme: entītiju, kas deklarēta ārpus funkcijas (virs tās), var redzēt funkciju parametru sarakstā un arī funkciju blokā.
Etiķete
Etiķetes darbības joma ir funkcija, kurā tā parādās. Šis kods ilustrē to:
# iekļautizmantojot nosaukumvietu std;
anulēt fn ()
goto labl;
/ * citi paziņojumi * /
labl: int inte = 2;
cout<
int main ()
fn ();
atgriešanās 0;
Rezultāts ir 2.
Uzskaitīšanas joma
Neizskatīts uzskaitījums
Apsveriet šādu if-block:
enum a, b, c = b + 2;
cout<
Rezultāts ir 0 1 3.
Bloka pirmā rinda ir uzskaitījums, a, b un c ir tās uzskaitītāji. Uzskaitītāja darbības joma sākas no deklarēšanas vietas līdz skaitīšanas pievienojošā bloka beigām.
Šis apgalvojums netiks apkopots, jo c deklarēšanas punkts ir aiz a:
enums a = c + 2, b, c;Šis koda segments netiks apkopots, jo skaitītājiem piekļūst pēc uzskaites bloka:
ja (1 == 1)enum a, b, c = b + 2;
cout<Iepriekš minētais uzskaitījums ir aprakstīts kā nepārbaudīts uzskaitījums, un tā uzskaitītāji tiek aprakstīti kā neatļautie uzskaitītāji. Tas ir tāpēc, ka tas sākas tikai ar rezervēto vārdu enum. Uzskaitījumi, kas sākas ar enum klasi vai enum struktūru, tiek aprakstīti kā diapazona uzskaitījumi. Viņu skaitītāji tiek raksturoti kā uzskaitītie.
Darbības jomas uzskaitījums
Šis apgalvojums ir labs:
Šis ir piemērota uzskaites piemērs. Nodarbības nosaukums ir nam. Šeit skaitītāja darbības joma sākas no deklarēšanas punkta līdz skaitīšanas definīcijas beigām, nevis skaitīšanas pievienojošā bloka beigām. Šis kods netiks apkopots:
ja (1 == 1)enum klases nam a, b, c = b + 2;
cout<
Klases darbības joma
Ar normālu mērogošanu deklaratīvais reģions sākas no punkta, pēc tam turpinās un apstājas citā punktā. Darbības joma pastāv vienā nepārtrauktā reģionā. Izmantojot klasi, entītijas darbības joma var būt dažādos reģionos, kas nav savienoti kopā. Joprojām tiek piemēroti ligzdoto bloku noteikumi. To ilustrē šāda programma:
# iekļautizmantojot nosaukumvietu std;
// Bāzes klase
klase Cla
Privāts:
int memP = 5;
aizsargāts:
int memPro = 9;
publiski:
anulēt fn ()
cout<
;
// Atvasinātā klase
klase DerCla: publiskā Cla
publiski:
int derMem = memPro;
;
int main ()
Cla obj;
obj.fn ();
DerCla derObj;
cout<
Rezultāts ir:
5
9
Cla klasē mainīgais memP ir redzams deklarēšanas vietā. Pēc tam īsā “aizsargāto” daļa tiek izlaista, pēc tam atkal redzama klases dalībnieka funkciju blokā. Atvasinātā klase tiek izlaista, pēc tam atkal redzama galvenajā () funkcijas tvērumā (bloks).
Cla klasē mainīgais memPro ir redzams deklarēšanas vietā. Publiskās funkcijas fn () daļa tiek izlaista, pēc tam redzama atvasinātajā klases apraksta blokā. Tas atkal redzams uz leju galvenajā () funkcijā.
Darbības jomas izšķiršanas operators
Darbības jomas izšķirtspējas operators C ++ ir :: . To izmanto, lai piekļūtu statiskam klases dalībniekam. To ilustrē šāda programma:
izmantojot nosaukumvietu std;
klase Cla
publiski:
statiskā int konst mem = 5;
publiski:
static void fn ()
cout<
;
int main ()
cout<
atgriešanās 0;
Rezultāts ir:
5
5
Statiskie dalībnieki ir redzami galvenajā () funkciju blokā, kuram var piekļūt, izmantojot darbības jomas izšķirtspējas operatoru.
Veidnes parametru tvērums
Parametra parametra nosaukuma parastā darbības joma sākas no deklarēšanas punkta līdz tā bloka beigām, kā norādīts šajā kodā:
veidneT Jānis = 11;
U Pēteris = 12.3;
T Marija = 13;
U prieks = 14.6;
;
U un T ir redzami blokā.
Veidnes funkcijas prototipam darbības joma sākas no deklarēšanas punkta līdz funkciju parametru saraksta beigām, kā norādīts šajā paziņojumā:
veidneTomēr, runājot par klases aprakstu (definīciju), darbības joma var būt arī atšķirīga, kā norādīts šajā kodā:
# iekļautizmantojot nosaukumvietu std;
veidne
publiski:
T numurs;
statiskā U ch;
void func (U cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
statisks tukšums (U ch)
ja (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
TheCla
obj.skaitlis = 12;
obj.func ('$', "500");
atgriešanās 0;
Vārds slēpjas
Nosaukuma slēpšanas piemērs rodas, ja viena un tā paša objekta veida nosaukums tiek atkārtoti deklarēts ligzdotā blokā. To ilustrē šāda programma:
# iekļautizmantojot nosaukumvietu std;
anulēt fn ()
int var = 3;
ja (1 == 1)
int var = 4;
cout<
cout<
int main ()
fn ();
atgriešanās 0;
Rezultāts ir:
4
3
Tas ir tāpēc, ka ligzdotā bloka vars slēpās var ārējā blokā.
Iespēja atkārtot deklarāciju tajā pašā darbības jomā
Deklarācijas punkts ir tas, kur nosaukums (pirmo reizi) tiek ieviests tā darbības jomā.
Funkcijas prototips
Dažādas, pat dažāda veida vienības parasti nevar deklarēt vienā un tajā pašā jomā. Tomēr funkcijas prototipu vienā un tajā pašā sfērā var deklarēt vairāk nekā vienu reizi. To ilustrē šāda programma ar diviem funkciju prototipiem un atbilstošo funkciju definīciju:
izmantojot nosaukumvietu std;
void fn (int num);
void fn (int num);
void fn (int num)
cout<
int main ()
fn (5);
atgriešanās 0;
Programma darbojas.
Pārslogotas funkcijas
Pārslogotas funkcijas ir funkcijas ar tādu pašu nosaukumu, bet ar atšķirīgiem funkciju parakstiem. Kā vēl vienu izņēmumu pārslogotas funkcijas ar tādu pašu nosaukumu var definēt vienā darbības jomā. To ilustrē šāda programma:
izmantojot nosaukumvietu std;
void fn (int num)
cout<
void fn (pludiņa nr.)
cout<
int main ()
fn (5);
pludiņš flt = 8.7;
fn (flt);
atgriešanās 0;
Rezultāts ir:
5
8.7
Pārslogotās funkcijas ir definētas globālajā darbības jomā.
Vārdamvietas darbības joma
Namespace Scope ir pelnījis savu rakstu. Minētais raksts ir rakstīts šai vietnei linuxhint.com. Vienkārši ierakstiet meklēšanas vārdus “Namespace Scope” šīs vietnes (lapas) meklēšanas lodziņā un noklikšķiniet uz Labi, un jūs saņemsiet rakstu.
Darbības joma dažādās daļās
Klase nav vienīgā shēma, kurā darbības joma var būt dažādās daļās. Drauga specifikators, izstrādātā tipa specifikatora un lietošanas direktīvu noteiktas izmantošanas iespējas ir citas shēmas, kuru darbības joma ir dažādās vietās - sīkāku informāciju skatiet vēlāk.
Secinājums
Darbības joma ir deklaratīvs reģions. Deklaratīvs reģions ir lielākā programmas teksta daļa, kurā ir derīgs entītijas nosaukums. To var sadalīt vairākās daļās saskaņā ar noteiktām programmēšanas shēmām, piemēram, ligzdotiem blokiem. Daļas, kurām nav deklarēšanas punkta, veido potenciālo darbības jomu. Potenciālajai darbības jomai deklarācija var būt vai nebūt.