Taikymo sritis C ++

Scope C



Subjektas C ++ turi pavadinimą, kurį galima deklaruoti ir (arba) apibrėžti. Deklaracija yra apibrėžimas, tačiau apibrėžimas nebūtinai yra deklaracija. Apibrėžtis paskirs atmintį įvardintam objektui, tačiau deklaracija gali skirti atminties pavadinimui. Deklaracinis regionas yra didžiausia programos dalis, kurioje galioja subjekto (kintamojo) pavadinimas. Tas regionas vadinamas apimtimi arba potencialia apimtimi. Šiame straipsnyje paaiškinama taikymo sritis naudojant C ++. Be to, norint suprasti šį straipsnį, reikia pagrindinių C ++ žinių.

Straipsnio turinys

Deklaracinis regionas ir taikymo sritis

Deklaracinis regionas yra didžiausia programos teksto dalis, kurioje galioja subjekto pavadinimas. Tai regionas, kuriame besąlyginis pavadinimas gali būti naudojamas (matomas) nurodant tą patį subjektą. Apsvarstykite šią trumpą programą:







#įtraukti
naudojant vardų sritisvalandų;

tuštumafn()
{
tarptkur= 3;
jei (1==1)
{
kaina<<kur<<' n';
}
}

tarptpagrindinis()
{
fn();
grįžti 0;
}

Funkcija fn () turi du blokus: vidinį bloką if-sąlygai ir išorinį bloką funkcijos korpusui. Identifikatorius var yra įvestas ir matomas išoriniame bloke. Tai taip pat matyti vidiniame bloke, su cout teiginiu. Išorinis ir vidinis blokai yra pavadinimo sritis, var.



Tačiau pavadinimas var gali būti naudojamas deklaruojant kitą objektą, pvz., Plūdę vidiniame bloke. Toliau pateiktas kodas tai iliustruoja:



#įtraukti
naudojant vardų sritisvalandų;

tuštumafn()
{
tarptkur= 3;
jei (1==1)
{
plūdėkur= 7.5;
kaina<<kur<<' n';
}
}

tarptpagrindinis()
{
fn();
grįžti 0;
}

Išėjimas yra 7,5. Šiuo atveju pavadinimo, var, nebegalima naudoti vidiniame bloke, nurodant 3 vertės sveikąjį skaičių, kuris buvo įvestas (deklaruotas) išoriniame bloke. Tokie vidiniai blokai vadinami potencialia išorės bloke deklaruotų subjektų taikymo sritimi.





Pastaba: to paties tipo subjektas, kaip ir išorinis blokas, vis tiek gali būti deklaruojamas vidiniame bloke. Tačiau šiuo atveju vidiniame bloke galioja nauja deklaracija ir jos reikšmė, o senoji deklaracija ir jos reikšmė už vidinio bloko lieka galioja išoriniame bloke.

To paties pavadinimo deklaracija vidiniame bloke paprastai pakeičia to paties pavadinimo deklaraciją už to vidinio bloko ribų. Vidiniai blokai gali įdėti kitus vidinius blokus.



Pasaulinė taikymo sritis

Kai programuotojas tik pradeda rašyti failą, tai yra pasaulinė apimtis. Tai iliustruoja ši trumpa programa:

#įtraukti
naudojant vardų sritisvalandų;

plūdėkur= 9.4;

tarptpagrindinis()
{
kaina <<kur<<' n';
kaina <<::kur<<' n';

grįžti 0;
}

Išėjimas yra:
9.4
9.4

Šiuo atveju deklaracinis regionas arba apimtis var prasideda nuo var deklaravimo taško, tęsiasi žemyn iki failo (vertimo vieneto) pabaigos.

Pagrindinės () funkcijos blokas yra kitokia apimtis; tai yra įterpta pasaulinės apimties sritis. Norėdami pasiekti visuotinės apimties objektą iš kitos apimties, identifikatorius naudojamas tiesiogiai arba prieš jį yra apimties sprendimo operatorius ::.

Pastaba: subjektas, pagrindinis (), taip pat deklaruojamas visuotinėje apimtyje.

Bloko taikymo sritis

Teiginys if, while, do, for arba switch gali apibrėžti bloką. Toks teiginys yra sudėtinis teiginys. Bloke deklaruojamo kintamojo pavadinimas turi bloko apimtį. Jo taikymo sritis prasideda jo deklaravimo vietoje ir baigiasi bloko pabaigoje. Ši trumpa programa iliustruoja kintamąjį, identišką:

#įtraukti
naudojant vardų sritisvalandų;

tarptpagrindinis()
{
jei (1==1)
{
/*kai kurie teiginiai*/
tarpttapatybė= 5;
kaina<<tapatybė<<' n';
/*kai kurie teiginiai*/
}
grįžti 0;
}

Kintamasis, pvz., Identiškas, deklaruojamas bloko apimtyje, yra vietinis kintamasis.

Kintamasis, paskelbtas už bloko ribų ir virš jo, gali būti matomas bloko antraštėje (pvz., Sąlyga, jei blokuojama) ir taip pat bloke. Ši trumpa programa parodo tai kintamajam identifikuoti:

#įtraukti
naudojant vardų sritisvalandų;

tarptpagrindinis()
{
tarptidentifikuoti= 8;

jei (identifikuoti== 8)
{
kaina<<identifikuoti<<' n';
}
grįžti 0;
}

Išvestis yra 8. Čia yra dvi blokų apimtys: pagrindinės () funkcijos blokas ir įdėtas sakinys if-sudėtis. Įdėtas blokas yra pagrindinė () funkcijų bloko sritis.

Bloko apimtyje pateikta deklaracija negali būti matoma už bloko ribų. Ši trumpa programa, kuri nerenkama, tai iliustruoja kintamuoju kintamuoju:

#įtraukti
naudojant vardų sritisvalandų;

tarptpagrindinis()
{
jei (1 == 1)
{
tarptkintamasis= penkiolika;
}
kaina<<kintamasis<<' n'; // klaida: pasiekiama už jos ribų.

grįžti 0;
}

Kompiliatorius pateikia kintamojo pranešimą kintamajam.

Įvestas subjektas, deklaruotas sudėtinės funkcijos antraštėje, negali būti matomas už junginio teiginio ribų (žemiau). Šis ciklo kodas nebus sukompiliuotas, todėl atsiras klaidos pranešimas:

#įtraukti
naudojant vardų sritisvalandų;

tarptpagrindinis()
{
dėl (tarpti=0;i<4; ++i)
{
kaina<<i<<'';
}
kaina<<i<<'';

grįžti 0;
}

Iteracijos kintamasis, i, matomas ciklo bloko viduje, bet ne už ciklo bloko.

Funkcijos apimtis

Funkcijos parametras matomas funkcijų bloke. Funkcijų bloke deklaruotas subjektas matomas nuo deklaravimo taško iki funkcijų bloko pabaigos. Tai iliustruoja ši trumpa programa:

#įtraukti
#įtraukti
naudojant vardų sritisvalandų;

eilutė fn(eilutė str)
{
anglisstri[] = 'bananai';
/*kiti teiginiai*/
eilutė totalStr=p+stri;
grįžtitotalStr;
}

tarptpagrindinis()
{
eilutė totStr=fn('valgymas ');
kaina<<totStr<<' n';

grįžti 0;
}

Išėjimas yra:
valgant bananus

Pastaba: objektas, deklaruotas už funkcijos ribų (virš jos), matomas funkcijų parametrų sąraše ir funkcijų bloke.

Etiketė

Etiketės taikymo sritis yra funkcija, kurioje ji rodoma. Toliau pateiktas kodas tai iliustruoja:

#įtraukti
naudojant vardų sritisvalandų;

tuštumafn()
{
eiti įLabl;
/*kiti teiginiai*/
Labl: tarptne= 2;
kaina<<ne<<' n';
}

tarptpagrindinis()
{
fn();

grįžti 0;
}

Išėjimas yra 2.

Sąrašo apimtis

Nepaskaitytas sąrašas
Apsvarstykite šį „if-block“:

jei (1==1)
{
enum {a, b, c=b+2};
kaina<<į<<''<<b<<''<<c<<' n';
}

Išėjimas yra 0 1 3.

Pirmoji bloko eilutė yra išvardijimas, a, b ir c yra jo surašytojai. Surašytojo taikymo sritis prasideda nuo deklaravimo momento iki surašymo priedo bloko pabaigos.

Šis teiginys nebus sudarytas, nes c deklaravimo taškas yra po a:

enum {į=c+2, b, c};

Šis kodo segmentas nebus sukompiliuotas, nes surašinėtojai pasiekiami po surašymo blokinio bloko:

jei (1==1)
{
enum {a, b, c=b+2};
}
kaina<<į<<''<<b<<''<<c<<' n'; // klaida: nepatenka į taikymo sritį

Aukščiau pateiktas surašymas yra apibūdinamas kaip nesuskaitytas sąrašas, o jo surašytojai - kaip neskopuoti. Taip yra todėl, kad jis prasideda tik rezervuotu žodžiu, enum. Skaičiavimai, prasidedantys „enum class“ arba „enum structure“, apibūdinami kaip apimties surašymai. Jų surašytojai apibūdinami kaip apimties surašytojai.

Apimties sąrašas
Šis teiginys yra gerai:

enum klasėPatinas{a, b, c=b+2};

Tai yra apimties surašymo pavyzdys. Klasės pavadinimas yra nam. Čia surašytojo taikymo sritis prasideda nuo deklaravimo taško iki surašymo apibrėžimo pabaigos, o ne surašymo bloko pabaiga. Šis kodas nebus sukompiliuotas:

jei (1==1)
{
enum klasėPatinas{a, b, c=b+2};
kaina<<į<<''<<b<<''<<c<<' n'; // klaida: nepatenka į enum klasę ar enum structure
}

Klasės taikymo sritis

Esant normaliam taikymo srities nustatymui, deklaratyvusis regionas prasideda nuo taško, tada tęsiasi ir sustoja kitame taške. Taikymo sritis egzistuoja viename tęstiniame regione. Naudojant klasę, subjekto apimtis gali būti skirtinguose regionuose, kurie nėra sujungti. Įdėtiems blokams taikomos taisyklės. Toliau pateikta programa tai iliustruoja:

#įtraukti
naudojant vardų sritisvalandų;

// Bazinė klasė
klasėCla
{
privatus:
tarptmemP= 5;
apsaugotas:
tarptmemPro= 9;
viešas:
tuštumafn()
{
kaina<<memP<<' n';
}
};

// Išvestinė klasė
klasėDerCla: viešasCla
{
viešas:
tarptderMem=memPro;
};
tarptpagrindinis()
{
Cla obj;
obj.fn();
DerCla derObj;
kaina<<derObj.derMem<<' n';

grįžti 0;
}

Išėjimas yra:
5
9

Cla klasėje deklaracijos vietoje matomas kintamasis memP. Po to trumpa apsaugota dalis praleidžiama, tada vėl matoma klasės nario funkcijų bloke. Išvestinė klasė praleidžiama, tada vėl matoma pagrindinėje () funkcijos srityje (blokas).

„Cla“ klasėje kintamasis „memPro“ matomas deklaravimo vietoje. Viešosios funkcijos fn () dalis praleidžiama, tada matoma išvestiniame klasės aprašo bloke. Tai vėl matoma pagrindinėje () funkcijoje.

Taikymo srities sprendimo operatorius
Apimties skiriamosios gebos operatorius C ++ yra ::. Jis naudojamas norint pasiekti statinį klasės narį. Toliau pateikta programa tai iliustruoja:

#įtraukti
naudojant vardų sritisvalandų;

klasėCla
{
viešas:
statinis tarpt konstmeme= 5;
viešas:
statinis tuštumafn()
{
kaina<<meme<<' n';
}
};
tarptpagrindinis()
{
kaina<<Cla::meme<<' n';
Cla::fn();

grįžti 0;
}

Išėjimas yra:
5
5

Statiniai elementai matomi pagrindiniame () funkcijų bloke, prieinamame naudojant taikymo srities skiriamosios gebos operatorių.

Šablono parametrų apimtis

Įprasta šablono parametro pavadinimo apimtis prasideda nuo deklaravimo taško iki jo bloko pabaigos, kaip nurodyta šiame kode:

šabloną<tipasT,tipasU> strukturaAmžius
{
T Jonas= vienuolika;
Tu Petras= 12.3;
T Marija= 13;
U Džiaugsmas= 14.6;
};

U ir T matomi bloke.

Šablono funkcijos prototipo taikymo sritis prasideda nuo deklaravimo taško iki funkcijos parametrų sąrašo pabaigos, kaip nurodyta toliau:

šabloną<tipasT,tipasU> tuštumafunkcija(Tu ne, tu,konst anglis *p);

Tačiau, kalbant apie klasės aprašymą (apibrėžimą), taikymo sritis taip pat gali būti įvairių dalių, kaip nurodyta šiame kode:

#įtraukti
naudojant vardų sritisvalandų;

šabloną<klasėT,klasėU> klasėTheCla
{
viešas:
t num;
statinisU ch;

tuštumafunkcija(Tu tėvas,konst anglis *p)
{
kaina << 'Yra' <<ant vieno<< „vertos knygos“ <<ne<<p<< ' parduotuvėje.' << ' n';
}
statinis tuštumalinksma(U ch)
{
jei (ch== 'iki')
kaina << „Oficiali statinio nario funkcija“ << ' n';
}
};

tarptpagrindinis()
{
TheCla<tarpt,anglis>obj;
obj.ant vieno = 12;
obj.funkcija(„$“,„500“);

grįžti 0;
}

Vardas slepiamas

Pavadinimo slėpimo pavyzdys atsiranda tada, kai to paties objekto tipo pavadinimas iš naujo deklaruojamas įdėtame bloke. Toliau pateikta programa tai iliustruoja:

#įtraukti
naudojant vardų sritisvalandų;

tuštumafn()
{
tarptkur= 3;
jei (1==1)
{
tarptkur= 4;
kaina<<kur<<' n';
}
kaina<<kur<<' n';
}

tarptpagrindinis()
{
fn();
grįžti 0;
}

Išėjimas yra:
4
3

Taip yra todėl, kad įterptame bloke esantis var paslėpė var išoriniame bloke.

Galimybė pakartotinai deklaruoti tą pačią sritį

Deklaracijos esmė yra ta, kur pavadinimas (pirmą kartą) įvedamas į jo taikymo sritį.

Funkcijos prototipas
Įvairūs subjektai, net ir skirtingų tipų, paprastai negali būti deklaruojami toje pačioje srityje. Tačiau funkcijos prototipas toje pačioje srityje gali būti deklaruojamas daugiau nei vieną kartą. Šią programą iliustruoja du funkcijų prototipai ir atitinkama funkcijos apibrėžtis:

#įtraukti
naudojant vardų sritisvalandų;

tuštumafn(tarptant vieno);
tuštumafn(tarptant vieno);

tuštumafn(tarptant vieno)
{
kaina<<ant vieno<<' n';
}

tarptpagrindinis()
{
fn(5);

grįžti 0;
}

Programa veikia.

Perkrautos funkcijos
Perkrautos funkcijos yra funkcijos tuo pačiu pavadinimu, bet skirtingais funkcijų parašais. Kita išimtis - perkrautos funkcijos tuo pačiu pavadinimu gali būti apibrėžtos toje pačioje srityje. Toliau pateikta programa tai iliustruoja:

#įtraukti
naudojant vardų sritisvalandų;

tuštumafn(tarptant vieno)
{
kaina<<ant vieno<<' n';
}

tuštumafn(plūdėne)
{
kaina<<ne<<' n';
}

tarptpagrindinis()
{
fn(5);
plūdėflt= 8.7;
fn(flt);

grįžti 0;
}

Išėjimas yra:
5
8.7

Perkrautos funkcijos buvo apibrėžtos visuotinėje srityje.

Vardų srities apimtis

Vardų srities apimtis nusipelno savo straipsnio. Minėtas straipsnis buvo parašytas šiai svetainei, linuxhint.com. Tiesiog įveskite paieškos žodžius Vardų sritis šios svetainės (puslapio) paieškos laukelyje ir spustelėkite Gerai, ir gausite straipsnį.

Taikymo sritis skirtingomis dalimis

Klasė nėra vienintelė schema, kurioje taikymo sritis gali būti skirtingomis dalimis. Draugo nurodymas, tam tikri sudėtingo tipo specifikatoriaus naudojimo būdai ir naudojimo nurodymai yra kitos schemos, kuriose taikymo sritis yra skirtingose ​​vietose-išsamiau žr. Vėliau.

Išvada

Apimtis yra deklaratyvus regionas. Deklaracinis regionas yra didžiausia programos teksto dalis, kurioje galioja subjekto pavadinimas. Jį galima suskirstyti į daugiau nei vieną dalį pagal tam tikras programavimo schemas, pavyzdžiui, įdėtus blokus. Porcijos, kuriose nėra deklaravimo taško, sudaro galimą taikymo sritį. Potenciali taikymo sritis gali arba neturi deklaracijos.