C ++

Področje uporabe v jeziku C ++

Področje uporabe v jeziku C ++
Entiteta v jeziku C ++ ima ime, ki ga je mogoče prijaviti in / ali definirati. Izjava je definicija, vendar definicija ni nujno izjava. Definicija dodeli pomnilnik za imenovano entiteto, vendar lahko izjava dodeli pomnilnik za imenovano entiteto ali ne. Deklarativna regija je največji del programa, v katerem je veljavno ime entitete (spremenljivke). Ta regija se imenuje obseg ali potencialni obseg. Ta članek pojasnjuje obseg v jeziku C++. Poleg tega je za razumevanje tega članka potrebno osnovno znanje jezika C ++.

Vsebina članka

Deklarativna regija in področje uporabe

Deklarativna regija je največji del besedila programa, v katerem je veljavno ime entitete. To je regija, v kateri se nekvalificirano ime lahko uporablja (vidi) za sklicevanje na isto entiteto. Upoštevajte naslednji kratek program:

#include
uporaba imenskega prostora std;
void fn ()

int var = 3;
če (1 == 1)

cout<

int main ()

fn ();
vrnitev 0;

Funkcija fn () ima dva bloka: notranji blok za stanje if in zunanji blok za telo funkcije. Identifikator var je predstavljen in viden v zunanjem bloku. To je vidno tudi v notranjem bloku z izjavo cout. Zunanji in notranji blok sta obseg imena, var.

Vendar se lahko ime var še vedno uporablja za razglasitev druge entitete, na primer float v notranjem bloku. Naslednja koda to ponazarja:

#include
uporaba imenskega prostora std;
void fn ()

int var = 3;
če (1 == 1)

float var = 7.5;
cout<

int main ()

fn ();
vrnitev 0;

Izhod je 7.5. V tem primeru imena var v notranjem bloku ni več mogoče uporabiti za sklicevanje na celo število vrednosti 3, ki je bilo uvedeno (deklarirano) v zunanjem bloku. Takšni notranji bloki se imenujejo potencialni obseg za entitete, prijavljene v zunanjem bloku.

Opomba: V notranjem bloku je še vedno mogoče prijaviti entiteto istega tipa, kot je zunanji blok. V tem primeru je v notranjem bloku veljavna nova deklaracija in njen pomen, medtem ko stara deklaracija in njen pomen zunaj notranjega bloka ostaneta veljavni v zunanjem bloku.

Izjava z istim imenom v notranjem bloku običajno preglasi izjavo z istim imenom zunaj tega notranjega bloka. Notranji bloki lahko ugnezdijo druge notranje bloke.

Globalni obseg

Ko programer šele začne tipkati datoteko, je to globalni obseg. To ponazarja naslednji kratek program:

#include
uporaba imenskega prostora std;
float var = 9.4;
int main ()

cout <cout <<::var<<'\n';
vrnitev 0;

Rezultat je:
9.4
9.4

V tem primeru se deklarativno območje ali obseg za var začne od točke deklaracije za var, nadaljuje navzdol do konca datoteke (prevajalska enota).

Blok funkcije main () je drugačnega obsega; gre za ugnezdeni obseg za globalni obseg. Za dostop do entitete globalnega obsega iz drugega obsega se identifikator uporablja neposredno ali pred njim operater ločljivosti obsega: .

Opomba: Tudi entiteta, main (), je navedena v globalnem obsegu.

Block Scope

Stavek if, while, do, for ali switch lahko definira vsak blok. Takšna izjava je sestavljena izjava. Ime spremenljivke, deklarirane v bloku, ima obseg bloka. Njeno področje uporabe se začne na točki izjave in konča na koncu bloka. Naslednji kratek program to ponazarja za spremenljivko ident:

#include
uporaba imenskega prostora std;
int main ()

če (1 == 1)

/ * nekaj izjav * /
int ident = 5;
cout</ * nekaj izjav * /

vrnitev 0;

Spremenljivka, kot je ident, deklarirana v obsegu bloka, je lokalna spremenljivka.

Spremenljivka, deklarirana zunaj obsega bloka in nad njo, je vidna v glavi bloka (npr.g., pogoj za if-block) in tudi znotraj bloka. Naslednji kratek program to ponazarja za spremenljivko, identif:

#include
uporaba imenskega prostora std;
int main ()

int identif = 8;
če (identif == 8)

cout<
vrnitev 0;

Izhod je 8. Tu sta dva obsega blokov: blok za funkcijo main () in ugnezdeni stavek if-complex. Vgnezdeni blok je potencialni obseg funkcijskega bloka main ().

Izjave, vnesene v obseg bloka, ni mogoče videti zunaj bloka. Naslednji kratek program, ki se ne prevede, to ponazarja s spremenljivko variab:

#include
uporaba imenskega prostora std;
int main ()

če (1 == 1)

int variab = 15;

cout<vrnitev 0;

Prevajalnik ustvari sporočilo o napaki za variab.

Subjekta, ki je predstavljen v glavi sestavljene funkcije, ni mogoče videti zunaj (pod) sestavljenega stavka. Naslednja koda zanke for ne bo prevedena, kar bo povzročilo sporočilo o napaki:

#include
uporaba imenskega prostora std;
int main ()

za (int i = 0; i<4; ++i)

cout<
cout<vrnitev 0;

Spremenljivka iteracije i je vidna znotraj bloka for-loop, ne pa tudi zunaj bloka for-loop.

Področje uporabe

Funkcijski parameter je viden v funkcijskem bloku. Subjekt, prijavljen v funkcijskem bloku, je viden od točke deklaracije do konca funkcijskega bloka. To ponazarja naslednji kratek program:

#include
#include
uporaba imenskega prostora std;
niz fn (niz str)

char stri [] = "banane";
/ * druge izjave * /
niz totalStr = str + stri;
vrni totalStr;

int main ()

niz totStr = fn ("jedo");
cout<vrnitev 0;

Rezultat je:
uživanje banan

Opomba: Entiteto, prijavljeno zunaj funkcije (nad njo), lahko vidimo na seznamu funkcijskih parametrov in tudi v funkcijskem bloku.

Oznaka

Obseg oznake je funkcija, v kateri se pojavi. Naslednja koda to ponazarja:

#include
uporaba imenskega prostora std;
void fn ()

pojdi na labl;
/ * druge izjave * /
labl: int inte = 2;
cout<
int main ()

fn ();
vrnitev 0;

Izhod je 2.

Obseg štetja

Nešteto štetje
Razmislite o naslednjem bloku if:

če (1 == 1)

enum a, b, c = b + 2;
cout<

Izhod je 0 1 3.

Prva vrstica v bloku je oštevilčenje, a, b in c so njegovi števci. Obseg števca se začne od točke deklaracije do konca priloženega bloka oštevilčenja.

Naslednja izjava ne bo sestavljena, ker je točka izjave c za točko a:

enum a = c + 2, b, c;

Naslednji segment kode se ne bo prevedel, ker se do števcev dostopa po zapornem bloku oštevilčenja:

če (1 == 1)

enum a, b, c = b + 2;

cout<Zgornje naštevanje je opisano kot nespremenjeno naštevanje, njegovi preštevalci pa kot neopredeljeni naštevalci. To pa zato, ker se začne samo z rezervirano besedo enum. Številke, ki se začnejo z enum razredom ali enum strukturo, so opisane kot obsežne enumeracije. Njihovi preštevalci so opisani kot števci z obsegom.

Obseg štetja
Naslednja izjava je v redu:

enum razred nam a, b, c = b + 2;

To je primer obsežnega naštevanja. Ime predavanja je nam. Tu se obseg števca začne od točke deklaracije do konca definicije oštevilčenja in ne od konca priloženega bloka za oštevilčenje. Naslednja koda ne bo prevedena:

če (1 == 1)

enum razred nam a, b, c = b + 2;
cout<

Obseg razreda

Z običajnim obsegom se deklarativna regija začne od točke, nato se nadaljuje in ustavi na drugi točki. Obseg obstaja v eni neprekinjeni regiji. Pri razredu je lahko obseg entitete v različnih regijah, ki niso združene. Pravila za ugnezdene bloke še vedno veljajo. Naslednji program to ponazarja:

#include
uporaba imenskega prostora std;
// Osnovni razred
razred Cla

zasebno:
int memP = 5;
zaščiteno:
int memPro = 9;
javno:
void fn ()

cout<
;
// Izpeljani razred
razred DerCla: javni Cla

javno:
int derMem = memPro;
;
int main ()

Cla obj;
obj.fn ();
DerCla derObj;
cout<vrnitev 0;

Rezultat je:
5
9

V razredu Cla je spremenljivka memP vidna na točki deklaracije. Po tem se kratki del zaščitenega preskoči in nato znova vidi v funkcijskem bloku člana razreda. Izpeljani razred se preskoči in nato znova vidi v obsegu funkcije main () (blok).

V razredu Cla je spremenljivka memPro vidna na točki deklaracije. Del javne funkcije fn () je preskočen, nato pa viden v izpeljanem bloku opisa razreda. V funkciji main () se spet vidi.

Operater ločljivosti obsega
Operator ločljivosti obsega v jeziku C ++ je: . Uporablja se za dostop do statičnega člana razreda. Naslednji program to ponazarja:

#include
uporaba imenskega prostora std;
razred Cla

javno:
statični int const mem = 5;
javno:
statična praznina fn ()

cout<
;
int main ()

cout<Cla :: fn ();
vrnitev 0;

Rezultat je:
5
5

Statični člani so vidni v glavnem funkcijskem bloku (), do katerega lahko dostopate z operaterjem ločljivosti obsega.

Obseg parametra predloge

Običajni obseg imena parametra predloge se začne od točke deklaracije do konca bloka, kot v naslednji kodi:

predloga strukturne dobe

T Janez = 11;
U Peter = 12.3;
T Marija = 13;
U radost = 14.6;
;

U in T sta vidna znotraj bloka.

Za prototip funkcije predloge se obseg začne od točke deklaracije do konca seznama parametrov funkcije, kot v naslednji izjavi:

predloga void func (T ne, U cha, const char * str);

Ko gre za opis razreda (definicija), pa je lahko obseg tudi različnih delov, kot je v naslednji kodi:

#include
uporaba imenskega prostora std;
predloga razred TheCla

javno:
T številka;
statični U ch;
void func (U cha, const char * str)

cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';

statična praznina (U ch)

če (ch == 'a')
cout << "Official static member function" << '\n';

;
int main ()

TheCla obj;
obj.število = 12;
obj.func ('$', "500");
vrnitev 0;

Skrivanje imena

Primer skrivanja imena se zgodi, ko je ime istega tipa predmeta ponovno deklarirano v ugnezdenem bloku. Naslednji program to ponazarja:

#include
uporaba imenskega prostora std;
void fn ()

int var = 3;
če (1 == 1)

int var = 4;
cout<
cout<
int main ()

fn ();
vrnitev 0;

Rezultat je:
4
3

To je zato, ker je var v ugnezdenem bloku skril var v zunanjem bloku.

Možnost ponovitve izjave v istem obsegu

Bistvo izjave je, če je ime (prvič) uvedeno v obseg.

Prototip funkcije
Različnih entitet, tudi različnih vrst, običajno ni mogoče prijaviti v istem obsegu. Vendar je mogoče prototip funkcije razglasiti več kot enkrat v istem obsegu. Naslednji program z dvema prototipom funkcij in ustrezno definicijo funkcije to ponazarja:

#include
uporaba imenskega prostora std;
void fn (int num);
void fn (int num);
void fn (int num)

cout<
int main ()

fn (5);
vrnitev 0;

Program deluje.

Preobremenjene funkcije
Preobremenjene funkcije so funkcije z istim imenom, vendar različnimi podpisi funkcij. Kot drugo izjemo je mogoče preobremenjene funkcije z istim imenom definirati v istem obsegu. Naslednji program to ponazarja:

#include
uporaba imenskega prostora std;
void fn (int num)

cout<
void fn (float no)

cout<
int main ()

fn (5);
float flt = 8.7;
fn (flt);
vrnitev 0;

Rezultat je:
5
8.7

Preobremenjene funkcije so bile definirane v globalnem obsegu.

Obseg imenskega prostora

Obseg imenskega prostora si zasluži svoj članek. Omenjeni članek je bil napisan za to spletno stran, linuxhint.com. V iskalno polje tega spletnega mesta (strani) vnesite iskalne besede »Obseg imenskega prostora« in kliknite V redu in članek bo prikazan.

Obseg v različnih delih

Razred ni edina shema, pri kateri je obseg lahko v različnih delih. Specifikator prijateljev, določene uporabe specifikacij izdelanega tipa in direktive o uporabi so druge sheme, pri katerih je obseg na različnih mestih - za podrobnosti glej kasneje.

Zaključek

Obseg je deklarativna regija. Deklarativna regija je največji del besedila programa, v katerem je veljavno ime entitete. V skladu z nekaterimi programskimi shemami, kot so ugnezdeni bloki, ga lahko razdelimo na več delov. Deli, ki nimajo točke izjave, tvorijo potencialni obseg. Izjava lahko vsebuje potencialno področje uporabe ali pa tudi ne.

Kako obrniti smer drsenja miške in sledilne ploščice v sistemu Windows 10
Miška in Sledilna ploščicaRačunalništvo ni samo enostavno, ampak bolj učinkovito in manj zamudno. Življenja brez teh naprav si ne moremo predstavljati...
Kako spremeniti miškin kazalec in velikost, barvo in shemo kazalca v sistemu Windows 10
Kazalec miške in kazalec v operacijskem sistemu Windows 10 sta zelo pomembna vidika operacijskega sistema. To lahko rečemo tudi za druge operacijske s...
Brezplačni in odprtokodni igralni mehanizmi za razvoj iger Linux
Ta članek bo zajemal seznam brezplačnih in odprtokodnih igralnih mehanizmov, ki jih je mogoče uporabiti za razvoj 2D in 3D iger v Linuxu. Obstaja veli...