Obsah článku
- Deklaratívny región a rozsah
- Globálny rozsah
- Rozsah pôsobnosti
- Rozsah funkcií
- Rozsah vymenovania
- Rozsah triedy
- Rozsah parametra šablóny
- Skrývanie mien
- Možnosť opakovaného vyhlásenia v rovnakom rozsahu
- Rozsah menného priestoru
- Rozsah v rôznych častiach
- Záver
Deklaratívny región a rozsah
Deklaratívna oblasť je najväčšia časť programového textu, v ktorej je platný názov entity. Je to oblasť, v ktorej sa dá nekvalifikovaný názov použiť (vidieť) na označenie rovnakej entity. Zvážte nasledujúci krátky program:
#includepomocou namespace std;
void fn ()
int var = 3;
ak (1 == 1)
cout<
int main ()
fn ();
návrat 0;
Funkcia fn () má dva bloky: vnútorný blok pre podmienku if a vonkajší blok pre telo funkcie. Identifikátor var je zavedený a viditeľný vo vonkajšom bloku. Je to vidieť aj vo vnútornom bloku s vyhlásením cout. Vonkajší a vnútorný blok sú rozsahom názvu, var.
Názov var však možno stále použiť na deklaráciu inej entity, napríklad float vo vnútornom bloku. Ilustruje to nasledujúci kód:
#includepomocou namespace std;
void fn ()
int var = 3;
ak (1 == 1)
float var = 7.5;
cout<
int main ()
fn ();
návrat 0;
Výstup je 7.5. V takom prípade sa meno var už nemôže vo vnútornom bloku použiť na označenie celého čísla hodnoty 3, ktoré bolo zavedené (deklarované) vo vonkajšom bloku. Takéto vnútorné bloky sa označujú ako potenciálny rozsah pre entity deklarované vo vonkajšom bloku.
Poznámka: Entitu rovnakého typu, ako je entita vonkajšieho bloku, možno stále deklarovať vo vnútornom bloku. V tomto prípade však platí vo vnútornom bloku nová deklarácia a jej význam, zatiaľ čo stará deklarácia a jej význam mimo vnútorného bloku zostávajú v platnosti vo vonkajšom bloku.
Rovnomenná deklarácia vo vnútornom bloku zvyčajne prepíše deklaráciu rovnakého mena mimo tohto vnútorného bloku. Vnútorné bloky môžu vkladať ďalšie vnútorné bloky.
Globálny rozsah
Keď programátor iba začne písať súbor, jedná sa o globálny rozsah. Ilustruje to nasledujúci krátky program:
#includepomocou namespace std;
float var = 9.4;
int main ()
cout <cout <<::var<<'\n';
návrat 0;
Výstup je:
9.4
9.4
V takom prípade deklaratívna oblasť alebo rozsah pre var začína od bodu deklarácie pre var, pokračuje smerom nadol až do konca súboru (prekladovej jednotky).
Blok funkcie main () má iný rozsah; je to vnorený rozsah pre globálny rozsah. Na prístup k entite globálneho rozsahu z iného rozsahu sa použije identifikátor priamo alebo pred ním operátor rozlíšenia rozsahu, :: .
Poznámka: Entita main () je tiež deklarovaná v globálnom rozsahu.
Rozsah pôsobnosti
Príkaz if, while, do, for, alebo switch môže každý definovať blok. Takéto vyhlásenie je zložené. Názov premennej deklarovanej v bloku má rozsah bloku. Rozsah jeho pôsobnosti sa začína v bode vyhlásenia a končí sa na konci bloku. Nasledujúci krátky program to ilustruje pre premennú ident:
#includepomocou namespace std;
int main ()
ak (1 == 1)
/ * niektoré vyjadrenia * /
int ident = 5;
cout<
návrat 0;
Premenná, ako napríklad ident, deklarovaná v rozsahu bloku je lokálna premenná.
Premennú deklarovanú mimo rozsah bloku a nad ním vidno v hlavičke bloku (napr.g., podmienka pre if-block) a tiež v rámci bloku. Nasledujúci krátky program to ilustruje pre premennú identif:
#includepomocou namespace std;
int main ()
int identif = 8;
if (identif == 8)
cout<
návrat 0;
Výstup je 8. Existujú dva rozsahy blokov: blok pre funkciu main () a vnorený príkaz if-compound. Vnorený blok je potenciálny rozsah funkčného bloku main ().
Vyhlásenie zavedené v rozsahu bloku nemožno vidieť mimo bloku. Nasledujúci krátky program, ktorý sa nekompiluje, to ilustruje pomocou premennej variab:
#includepomocou namespace std;
int main ()
ak (1 == 1)
int premenná = 15;
cout<
Kompilátor vytvorí chybové hlásenie pre premennú.
Entitu zavedenú deklarovanú v hlavičke zloženej funkcie nemožno vidieť mimo (pod) zloženým príkazom. Nasledujúci kód for-loop sa nebude kompilovať, výsledkom bude chybové hlásenie:
#includepomocou namespace std;
int main ()
pre (int i = 0; i<4; ++i)
cout<
cout<návrat 0;
Premenná iterácie, i, je videná vo vnútri bloku for-loop, ale nie mimo bloku for-loop.
Rozsah funkcií
Funkčný parameter je viditeľný vo funkčnom bloku. Entita deklarovaná vo funkčnom bloku je videná od bodu deklarácie po koniec funkčného bloku. Ilustruje to nasledujúci krátky program:
#include#include
pomocou namespace std;
string fn (string str)
char stri [] = "banány";
/ * ďalšie vyjadrenia * /
string totalStr = str + stri;
návrat totalStr;
int main ()
string totStr = fn ("jesť");
cout<
Výstup je:
jesť banány
Poznámka: Entitu deklarovanú mimo funkciu (nad ňou) je možné vidieť v zozname funkčných parametrov a tiež vo funkčnom bloku.
Štítok
Rozsah štítku je funkcia, v ktorej sa nachádza. Ilustruje to nasledujúci kód:
#includepomocou namespace std;
void fn ()
choď labl;
/ * ďalšie vyjadrenia * /
labl: int inte = 2;
cout<
int main ()
fn ();
návrat 0;
Výstup je 2.
Rozsah výpočtu
Nezakódovaný výpočet
Zvážte nasledujúci blok if:
enum a, b, c = b + 2;
cout<
Výstup je 0 1 3.
Prvý riadok v bloku je enumerácia, a, b a c sú jeho enumerátory. Rozsah enumerátora začína od deklaračného bodu po koniec priloženého bloku enumerácie.
Nasledujúci príkaz sa nebude kompilovať, pretože bod vyhlásenia c je za bodom a:
enum a = c + 2, b, c;Nasledujúci segment kódu sa nebude kompilovať, pretože k enumerátorom sa pristupuje po priloženom bloku výčtu:
ak (1 == 1)enum a, b, c = b + 2;
cout<Vyššie uvedený výčet je opísaný ako neskódovaný výčet a jeho enumerátory sú opísané ako neskódovaný enumerátor. Je to tak preto, lebo sa to začína iba rezervovaným slovom, enum. Výčty, ktoré začínajú triedou enum alebo štruktúrou enum, sú opísané ako vymenované výčty. Ich enumerátory sa popisujú ako enumerátory s obmedzeným rozsahom.
Rozsahovaný výčet
Nasledujúce tvrdenie je v poriadku:
Toto je príklad obmedzeného výčtu. Názov triedy je nam. Rozsah enumerátora tu začína od deklaračného bodu po koniec definície enumerácie, nie od konca priloženého bloku pre enumeráciu. Nasledujúci kód sa nebude kompilovať:
ak (1 == 1)enum trieda nam a, b, c = b + 2;
cout<
Rozsah triedy
Pri normálnom stanovení rozsahu začína deklaratívna oblasť od bodu, potom pokračuje a zastaví sa v inom bode. Rozsah pôsobnosti existuje v jednom súvislom regióne. V rámci tejto triedy môže byť pôsobnosť entity v rôznych regiónoch, ktoré nie sú spojené. Pravidlá pre vnorené bloky stále platia. Nasledujúci program to ilustruje:
#includepomocou namespace std;
// Základná trieda
trieda Cla
súkromné:
int memP = 5;
chránené:
int memPro = 9;
verejné:
void fn ()
cout<
;
// Odvodená trieda
trieda DerCla: verejná Cla
verejné:
int derMem = memPro;
;
int main ()
Cla obj;
obj.fn ();
DerCla derObj;
cout<
Výstup je:
5
9
V triede Cla je premenná memP videná v bode deklarácie. Potom sa krátka časť „chráneného“ preskočí, potom sa znova zobrazí vo funkčnom bloku člena triedy. Odvodená trieda sa preskočí, potom sa znova zobrazí v rozsahu funkcií (bloku) funkcie main ().
V triede Cla je premenná memPro videná v bode deklarácie. Časť verejnej funkcie fn () je preskočená a potom viditeľná v bloku popisu odvodenej triedy. Je to opäť vidieť dole vo funkcii main ().
Prevádzkovateľ riešenia rozsahu
Operátor rozlíšenia rozsahu v C ++ je :: . Používa sa na prístup k statickému členovi triedy. Nasledujúci program to ilustruje:
pomocou namespace std;
trieda Cla
verejné:
static int const mem = 5;
verejné:
static void fn ()
cout<
;
int main ()
cout<
návrat 0;
Výstup je:
5
5
Statické členy sú viditeľné vo funkčnom bloku main (), ku ktorému sa pristupuje pomocou operátora rozlíšenia rozsahu.
Rozsah parametra šablóny
Normálny rozsah názvu parametra šablóny sa začína od bodu vyhlásenia do konca jeho bloku, ako v nasledujúcom kóde:
šablónaT John = 11;
U Peter = 12.3;
T Mary = 13;
U Joy = 14.6;
;
U a T sú vidieť v bloku.
Pre prototyp funkcie šablóny rozsah začína od bodu deklarácie po koniec zoznamu parametrov funkcie, ako v nasledujúcom vyhlásení:
šablónaPokiaľ však ide o popis (definíciu) triedy, rozsah môže mať tiež rôzne časti, ako v nasledujúcom kóde:
#includepomocou namespace std;
šablóna
verejné:
T num;
statický U ch;
void func (U cha, const char * str)
cout << "There are " << num << " books worth " << cha << str << " in the store." << '\n';
static void fun (U ch)
if (ch == 'a')
cout << "Official static member function" << '\n';
;
int main ()
TheCla
obj.num = 12;
obj.func ('$', "500");
návrat 0;
Skrývanie mien
Príklad skrytia názvu nastáva, keď sa vo vnorenom bloku znova deklaruje názov rovnakého typu objektu. Nasledujúci program to ilustruje:
#includepomocou namespace std;
void fn ()
int var = 3;
ak (1 == 1)
int var = 4;
cout<
cout<
int main ()
fn ();
návrat 0;
Výstup je:
4
3
Je to preto, že var vo vnorenom bloku skryl var vo vonkajšom bloku.
Možnosť opakovaného vyhlásenia v rovnakom rozsahu
Pointou vyhlásenia je miesto, kde je názov uvedený (po prvýkrát) v jeho rozsahu pôsobnosti.
Funkčný prototyp
Rôzne entity, dokonca aj rôznych typov, nemožno bežne deklarovať v rovnakom rozsahu. Prototyp funkcie však možno deklarovať viackrát v rovnakom rozsahu. Nasledujúci program s dvoma funkčnými prototypmi a zodpovedajúcou definíciou funkcie to ilustruje:
pomocou namespace std;
void fn (int num);
void fn (int num);
void fn (int num)
cout<
int main ()
fn (5);
návrat 0;
Program funguje.
Preťažené funkcie
Preťažené funkcie sú funkcie s rovnakým názvom, ale s rôznymi podpismi funkcií. Ako ďalšiu výnimku možno preťažené funkcie s rovnakým názvom definovať v rovnakom rozsahu. Nasledujúci program to ilustruje:
pomocou namespace std;
void fn (int num)
cout<
void fn (float no)
cout<
int main ()
fn (5);
float flt = 8.7;
fn (flt);
návrat 0;
Výstup je:
5
8.7
Preťažené funkcie boli definované v globálnom rozsahu.
Rozsah menného priestoru
Obor Namespace Scope si zaslúži vlastný článok. Uvedený článok bol napísaný pre tento web, linuxhint.com. Stačí do vyhľadávacieho poľa na tejto stránke (stránke) napísať hľadané slová „Namespace Scope“ a kliknúť na OK, čím získate článok.
Rozsah v rôznych častiach
Trieda nie je jedinou schémou, v ktorej môže byť rozsah v rôznych častiach. Špecifikátor priateľa, určité použitia vypracovaného špecifikátora typu a direktívy using sú ďalšie schémy, kde je rozsah na rôznych miestach - podrobnosti pozri ďalej.
Záver
Rozsah je deklaratívny región. Deklaratívna oblasť je najväčšia časť programového textu, v ktorej je platný názov entity. Môže byť rozdelený na viac ako jednu časť v súlade s určitými programovacími schémami, ako sú napríklad vnorené bloky. Časti, ktoré nemajú bod vyhlásenia, tvoria potenciálny rozsah. Potenciálny rozsah môže, ale nemusí mať vyhlásenie.