Artikkelin sisältö
- Ilmoittava alue ja soveltamisala
- Maailmanlaajuinen soveltamisala
- Estä soveltamisala
- Toimintoalue
- Luettelon laajuus
- Luokan laajuus
- Malliparametrin laajuus
- Nimi piilossa
- Mahdollisuus toistaa ilmoitus samassa laajuudessa
- Nimiavaruuden laajuus
- Soveltamisala eri annoksina
- Johtopäätös
Ilmoittava alue ja soveltamisala
Ilmoittava alue on suurin osa ohjelman tekstiä, jossa entiteetin nimi on voimassa. Se on alue, jolla ehdotonta nimeä voidaan käyttää (nähdä) viittaamaan samaan kokonaisuuteen. Harkitse seuraavaa lyhyttä ohjelmaa:
#sisältää
käyttämällä nimiavaruustuntia;
mitätönfn()
{
intmissä= 3;
jos (1==1)
{
kustannus<<missä<<'' n'';
}
}
inttärkein()
{
fn();
palata 0;
}
Funktiossa fn () on kaksi lohkoa: sisäinen lohko if-ehdolle ja ulkoinen lohko funktion rungolle. Tunniste, var, lisätään ja nähdään ulkoisessa lohkossa. Se näkyy myös sisälohkossa cout -lausunnon kanssa. Ulompi ja sisempi lohko ovat molemmat nimen laajuus, var.
Nimeä var, voidaan kuitenkin edelleen käyttää eri kokonaisuuden, kuten kellukkeen ilmoittamiseen sisäisessä lohkossa. Seuraava koodi havainnollistaa tätä:
#sisältää
käyttämällä nimiavaruustuntia;
mitätönfn()
{
intmissä= 3;
jos (1==1)
{
kelluamissä= 7.5;
kustannus<<missä<<'' n'';
}
}
inttärkein()
{
fn();
palata 0;
}
Lähtö on 7.5. Tässä tapauksessa nimeä var ei voi enää käyttää sisäisessä lohkossa viittaamaan kokonaislukuun arvo 3, joka lisättiin (julistettiin) ulkoiseen lohkoon. Tällaisia sisäisiä lohkoja kutsutaan mahdollisiksi ulottuvuuksiksi ulkoisessa lohkossa ilmoitetuille yksiköille.
Huomautus: Samantyyppinen entiteetti, kuten ulkoisen lohkon, voidaan silti ilmoittaa sisäisessä lohkossa. Kuitenkin tässä tapauksessa sisälauseessa on voimassa uusi ilmoitus ja sen merkitys, kun taas vanha ilmoitus ja sen merkitys sisäisen lohkon ulkopuolella pysyvät voimassa ulkoisessa lohkossa.
Saman nimen ilmoitus sisäisessä lohkossa yleensä ohittaa saman nimen julistuksen sisäisen lohkon ulkopuolella. Sisäiset lohkot voivat sisäistää muita sisäosia.
Maailmanlaajuinen soveltamisala
Kun ohjelmoija juuri alkaa kirjoittaa tiedostoa, se on maailmanlaajuinen laajuus. Seuraava lyhyt ohjelma havainnollistaa tätä:
#sisältääkäyttämällä nimiavaruustuntia;
kelluamissä= 9.4;
inttärkein()
{
kustannus <<missä<<'' n'';
kustannus <<::missä<<'' n'';
palata 0;
}
Lähtö on:
9.4
9.4
Tässä tapauksessa deklaratiivinen alue tai var -alue alkaa var -ilmoituksen kohdasta, jatkuu alaspäin tiedoston loppuun (käännösyksikkö).
Päätoiminnon () lohko on erilainen; se on sisäkkäinen laajuus maailmanlaajuiselle laajuudelle. Päästäkseen globaalin laajuuden entiteettiin eri laajuudesta tunnistetta käytetään suoraan tai sitä edeltää laajuudenratkaisuoperaattori ::.
Huomautus: Entiteetti, main (), on myös ilmoitettu maailmanlaajuisessa laajuudessa.
Estä soveltamisala
Jos, kun, tee, tee tai vaihda -lauseke voi kukin määrittää lohkon. Tällainen lausunto on yhdistelmä. Lohkossa ilmoitetun muuttujan nimellä on lohkon laajuus. Sen soveltamisala alkaa sen ilmoituskohdasta ja päättyy sen lohkon loppuun. Seuraava lyhyt ohjelma havainnollistaa tätä muuttujaa, ident:
#sisältääkäyttämällä nimiavaruustuntia;
inttärkein()
{
jos (1==1)
{
/*joitain väitteitä*/
intident= 5;
kustannus<<ident<<'' n'';
/*joitain väitteitä*/
}
palata 0;
}
Lohkon laajuudessa ilmoitettu muuttuja, kuten ident, on paikallinen muuttuja.
Lohkon laajuuden ulkopuolella ja sen yläpuolella ilmoitettu muuttuja näkyy lohkon otsikossa (esim. Ehto jos-lohko) ja myös lohkon sisällä. Seuraava lyhyt ohjelma havainnollistaa tätä muuttujaa, tunniste:
#sisältääkäyttämällä nimiavaruustuntia;
inttärkein()
{
inttunnista= 8;
jos (tunnista== 8)
{
kustannus<<tunnista<<'' n'';
}
palata 0;
}
Tulos on 8. Tässä on kaksi lohkon laajuutta: main () -funktion lohko ja sisäkkäinen if-yhdiste-lause. Sisäkkäinen lohko on päätoimintolohkon () mahdollinen laajuus.
Lohkon soveltamisalaan lisätty ilmoitus ei näy lohkon ulkopuolella. Seuraava lyhyt ohjelma, jota ei käännetä, havainnollistaa tätä muuttujalla muuttuja:
#sisältääkäyttämällä nimiavaruustuntia;
inttärkein()
{
jos (1 == 1)
{
intmuuttuja= viisitoista;
}
kustannus<<muuttuja<<'' n''; // virhe: käytetty sen soveltamisalan ulkopuolella.
palata 0;
}
Kääntäjä antaa muuttujalle virheilmoituksen.
Yhdistelmäfunktion otsikossa ilmoitettu kokonaisuus ei näy yhdistelmälausekkeen ulkopuolella (alla). Seuraavaa for-loop-koodia ei käännetä, mikä johtaa virheilmoitukseen:
#sisältääkäyttämällä nimiavaruustuntia;
inttärkein()
{
varten (inti=0;i<4; ++i)
{
kustannus<<i<<'';
}
kustannus<<i<<'';
palata 0;
}
Iteraatiomuuttuja i näkyy for-loop-lohkon sisällä, mutta ei for-loop-lohkon ulkopuolella.
Toimintoalue
Toimintolohkossa näkyy toimintoparametri. Toimintolohkossa ilmoitettu entiteetti nähdään ilmoituspisteestä toimintolohkon loppuun. Seuraava lyhyt ohjelma havainnollistaa tätä:
#sisältää#sisältää
käyttämällä nimiavaruustuntia;
merkkijono fn(merkkijono str)
{
hiiltyästri[] = 'banaanit';
/*muita lausuntoja*/
merkkijono totalStr=s+stri;
palatatotalStr;
}
inttärkein()
{
merkkijono totStr=fn('syöminen');
kustannus<<totStr<<'' n'';
palata 0;
}
Lähtö on:
banaanien syöminen
Huomaa: Toiminnon ulkopuolella (sen yläpuolella) ilmoitettu entiteetti näkyy toimintoparametriluettelossa ja myös toimintolohkossa.
Etiketti
Tarran laajuus on toiminto, jossa se esiintyy. Seuraava koodi havainnollistaa tätä:
#sisältääkäyttämällä nimiavaruustuntia;
mitätönfn()
{
meneLabl;
/*muita lausuntoja*/
Labl: intei= 2;
kustannus<<ei<<'' n'';
}
inttärkein()
{
fn();
palata 0;
}
Lähtö on 2.
Luettelon laajuus
Tarkentamaton luettelo
Harkitse seuraavaa if-blockia:
{
enum {a, b, c=b+2};
kustannus<<kohteeseen<<''<<b<<''<<c<<'' n'';
}
Lähtö on 0 1 3.
Lohkon ensimmäinen rivi on luettelo, a, b ja c ovat sen laskijat. Luetteloijan laajuus alkaa ilmoituskohdasta luettelon liitettävän lohkon loppuun.
Seuraavaa lausetta ei koota, koska c: n ilmoituspiste on a: n jälkeen:
enum {kohteeseen=c+2, b, c};Seuraavaa koodisegmenttiä ei käännetä, koska luetteloijia käytetään luettelon sulkevan lohkon jälkeen:
jos (1==1){
enum {a, b, c=b+2};
}
kustannus<<kohteeseen<<''<<b<<''<<c<<'' n''; // virhe: soveltamisalan ulkopuolella
Yllä olevaa luetteloa kuvataan skannaamattomana luettelona, ja sen luetteloijat kuvataan skannaamattomana. Tämä johtuu siitä, että se alkaa vain varatulla sanalla, enum. Luettelot, jotka alkavat enum -luokalla tai enum -rakenteella, kuvataan laajuusluetteloina. Niiden laskureita kuvataan laajuuslaskureiksi.
Laajuusluettelo
Seuraava lausunto on OK:
Tämä on esimerkki laajuudesta. Luokan nimi on nam. Tässä luetteloijan soveltamisala alkaa ilmoituskohdasta luettelointimääritelmän loppuun eikä luettelon sulkevan lohkon loppuun. Seuraavaa koodia ei käännetä:
jos (1==1){
enum luokkaUros{a, b, c=b+2};
kustannus<<kohteeseen<<''<<b<<''<<c<<'' n''; // virhe: enum -luokan tai enum -rakenteen ulottuvilta
}
Luokan laajuus
Normaalilla mittakaavalla deklaratiivinen alue alkaa pisteestä, jatkuu ja pysähtyy toiseen kohtaan. Soveltamisala on yhdellä jatkuvalla alueella. Luokan avulla kokonaisuuden laajuus voi olla eri alueilla, joita ei ole liitetty yhteen. Sisäkkäisiä lohkoja koskevat säännöt ovat edelleen voimassa. Seuraava ohjelma havainnollistaa tätä:
#sisältääkäyttämällä nimiavaruustuntia;
// Perusluokka
luokkaCla
{
yksityinen:
intmuisti= 5;
suojattu:
intmemPro= 9;
julkinen:
mitätönfn()
{
kustannus<<muisti<<'' n'';
}
};
// Johdettu luokka
luokkaDerCla: julkinenCla
{
julkinen:
intderMem=memPro;
};
inttärkein()
{
Cla obj;
obj.fn();
DerCla derObj;
kustannus<<derObj.derMem<<'' n'';
palata 0;
}
Lähtö on:
5
9
Luokassa Cla muuttuja memP näkyy ilmoituskohdassa. Sen jälkeen suojatun lyhyt osa ohitetaan ja nähdään sitten uudelleen luokan jäsentoimintolohkossa. Johdettu luokka ohitetaan ja nähdään sitten uudelleen päätoimintoalueella ().
Luokassa Cla muuttuja memPro näkyy ilmoituskohdassa. Julkisen funktion osa fn () ohitetaan ja nähdään sitten johdetussa luokankuvauslohkossa. Se näkyy jälleen alas päätoiminnossa ().
Scope Resolution Operaattori
Skaalatarkkuusoperaattori C ++: ssa on ::. Sitä käytetään pääsemään luokan staattiseen jäseneen. Seuraava ohjelma havainnollistaa tätä:
käyttämällä nimiavaruustuntia;
luokkaCla
{
julkinen:
staattinen int constmeemi= 5;
julkinen:
staattinen mitätönfn()
{
kustannus<<meemi<<'' n'';
}
};
inttärkein()
{
kustannus<<Cla::meemi<<'' n'';
Cla::fn();
palata 0;
}
Lähtö on:
5
5
Staattiset jäsenet näkyvät päätoiminto () -toimintolohkossa, jota käytetään laajuuden tarkkuuden operaattorilla.
Malliparametrin laajuus
Malliparametrin nimen normaali laajuus alkaa ilmoituskohdasta sen lohkon loppuun, kuten seuraavassa koodissa:
sapluuna<typenameT,typenameU> rakenneIät{
T John= yksitoista;
Sinä Peter= 12.3;
T Mary= 13;
U Joy= 14.6;
};
U ja T näkyvät lohkon sisällä.
Mallifunktion prototyypin laajuus alkaa ilmoituskohdasta funktion parametriluettelon loppuun, kuten seuraavassa lauseessa:
sapluuna<typenameT,typenameU> mitätöntoiminto(Et, sinä cha,const hiiltyä *s);Luokan kuvauksen (määritelmän) osalta soveltamisala voi kuitenkin olla myös eri osainen, kuten seuraavassa koodissa:
#sisältääkäyttämällä nimiavaruustuntia;
sapluuna<luokkaT,luokkaU> luokkaTheCla
{
julkinen:
t numero;
staattinenU ch;
mitätöntoiminto(Sinä isä,const hiiltyä *s)
{
kustannus << 'Siellä on ' <<yhdellä<< 'arvokkaita kirjoja' <<ei<<s<< ' kaupassa.' << '' n'';
}
staattinen mitätönhauskaa(U ch)
{
jos (ch== '')
kustannus << '' Virallinen staattinen jäsentoiminto '' << '' n'';
}
};
inttärkein()
{
TheCla<int,hiiltyä>obj;
obj.yhdellä = 12;
obj.toiminto($,'500');
palata 0;
}
Nimi piilossa
Esimerkki nimen piilottamisesta tapahtuu, kun saman objektityypin nimi julistetaan uudelleen sisäkkäisessä lohkossa. Seuraava ohjelma havainnollistaa tätä:
#sisältääkäyttämällä nimiavaruustuntia;
mitätönfn()
{
intmissä= 3;
jos (1==1)
{
intmissä= 4;
kustannus<<missä<<'' n'';
}
kustannus<<missä<<'' n'';
}
inttärkein()
{
fn();
palata 0;
}
Lähtö on:
4
3
Tämä johtuu siitä, että sisäkkäisen lohkon var piilotti varin ulkoisessa lohkossa.
Mahdollisuus toistaa ilmoitus samassa laajuudessa
Ilmoituksen tarkoitus on se, missä nimi esitetään (ensimmäistä kertaa) sen soveltamisalassa.
Toiminnon prototyyppi
Eri yhteisöjä, jopa erityyppisiä, ei yleensä voida ilmoittaa samaan soveltamisalaan. Toiminnon prototyyppi voidaan kuitenkin julistaa useammin kuin kerran samassa laajuudessa. Seuraava ohjelma, jossa on kaksi funktion prototyyppiä ja vastaava funktion määritelmä, havainnollistaa tätä:
käyttämällä nimiavaruustuntia;
mitätönfn(intyhdellä);
mitätönfn(intyhdellä);
mitätönfn(intyhdellä)
{
kustannus<<yhdellä<<'' n'';
}
inttärkein()
{
fn(5);
palata 0;
}
Ohjelma toimii.
Ylikuormitetut toiminnot
Ylikuormitetut toiminnot ovat toimintoja, joilla on sama nimi, mutta eri toimintojen allekirjoitukset. Toisena poikkeuksena voidaan nimetä ylikuormitetut toiminnot samalla nimellä. Seuraava ohjelma havainnollistaa tätä:
käyttämällä nimiavaruustuntia;
mitätönfn(intyhdellä)
{
kustannus<<yhdellä<<'' n'';
}
mitätönfn(kelluaei)
{
kustannus<<ei<<'' n'';
}
inttärkein()
{
fn(5);
kelluaflt= 8.7;
fn(flt);
palata 0;
}
Lähtö on:
5
8.7
Ylikuormitetut toiminnot on määritelty maailmanlaajuisesti.
Nimiavaruuden laajuus
Namespace Scope ansaitsee oman artikkelinsa. Mainittu artikkeli on kirjoitettu tälle verkkosivustolle, linuxhint.com. Kirjoita vain hakusanat Namespace Scope tämän sivuston (sivun) hakukenttään ja napsauta OK, niin saat artikkelin.
Soveltamisala eri annoksina
Luokka ei ole ainoa järjestelmä, jossa laajuus voi olla eri osissa. Ystävämäärittäjä, tietyt kehitetyn tyyppimääritteen käyttötavat ja käyttöohjeet ovat muita järjestelmiä, joissa soveltamisala on eri paikoissa-katso lisätietoja myöhemmin.
Johtopäätös
Soveltamisala on deklaratiivinen alue. Ilmoittava alue on suurin osa ohjelman tekstiä, jossa entiteetin nimi on voimassa. Se voidaan jakaa useampaan osaan tiettyjen ohjelmointimenetelmien, kuten sisäkkäisten lohkojen, mukaisesti. Osat, joilla ei ole ilmoituspistettä, muodostavat mahdollisen soveltamisalan. Mahdollisella soveltamisalalla voi olla tai ei ole ilmoitusta.