Նույնարկողի տեսանելիության տիրույթը - դա ելակետային ծրագրի այն ենթատեքստն է , որտեղ տվյալ նույնարկողը կարող է հանդես գալ միևնույն նշանակությամբ:
C++ լեզվում ցանկացած նույնարկողի համար նախատեսված են երեք կարգի տեսանելիության տիրույթներ`
1. Տեղական տեսանելիության տիրույթը - դա ելակետային ծրա- գրի ենթատեքստի այն մասն է, որտեղ սահմանվում է ֆունկցիան (կամ բլոկը): Բոլոր ֆունկցիաները ունեն իրենց սեփական տեղական տեսանելիության տիրույթները: Ֆունկցիայի ենթատեքստում պարու-նակվող յուրաքանչյուր բաղադրյալ հրահանգ (կամ բլոկ) առանձին նույնպես հանդիսանում է տեղական տեսանելիության տիրույթ:
2. Անունների տարածության տեսանելիության տիրույթ - ելակե-տային ծրագրի այն մասն է, որը չի գտնվում ֆունկցիաների հայտա-րարումների և սահմանումների, ինչպես նաև դասերի սահմանումների տեքստերի մեջ: Ընդ որում, ֆունկցայի հայտարման ժամանակ տրվում է նրա անունը, վերադարձվող արժեքների տիպերը և պարամետրերի ցուցակը: Ֆունկցիայի սահմանման ժամանակ բացի այդ ինֆորմացիա- յից տրվում է նաև ֆունկցիայի մարմինը, որը հրահանգների համա- խումբ է գրված ձևավոր փակագծերի մեջ:
Տիրույթի ամենաարտաքին մասին (ֆունկցիաների հայտարարումնե-րի և սահմանումների, ինչպես նաև դասերի սահմանումների տեքստերից դուրս գտնվող մասին ) անվանում են գլոբալ տեսանելիության տիրույթ կամ անունների տարածության գլոբալ տեսանելիության տիրույթ :
3. Դասի տեսանելիության տիրույթ - Դասի յուրաքանչյուր սահ-մանում ստեղծում է դասի առանձին տեսանելիության տիրույթ :
Ֆունկցիայի հայտարարումը գլոբալ տեսանելիության տիրույ- թում ստեղծում է գլոբալ ֆունկցիա, իսկ փոփոխականի հայտարարու- մը` գլոբալ օբյեկտ: Լռելյայն գլոբալ փոփոխականին տրվում է զերո սկզբնական արժեք:
Եթե ֆունկցիայի մարմնում գլոբալ օբյեկտի նույնարկողը օգտա-գործվում է որպես լոկալ փոփոխականի անուն, ապա ֆունկցիայի կա-տարման ժամանակ առաջնահերթությունը տրվում է լոկալ փոփոխա-կանին:
Ծրագրում գլոբալ օբյեկտը կարելի է սահմանել միայն մեկ անգամ: Քանի որ ելակետային ֆայլում նախքան օգտագործելը այն պետք է հայտարաված լինի, ապա մի քանի ֆայլերից բաղկացած ծրագրում անհրաժեշտ է հնարավորություն տալ հայտարարել օբյեկտը առանց այն սահմանելու: Այդ նպատակի համար C++ լեզվում նախատեսված է extern պահեստավորված բառը: Օրինակª
extern int i1;
հրահանգը ցույց է տալիս, որ ծրագրում գոյություն ունի
int i1;
հայտարարում:
extern հայտարարումը օբյեկտի համար տեղ չի հատկացնում: Այն միևնույն ելակետային ֆայլում կամ միևնույն ծրագրի տարբեր ֆայ-լերում կարող է հանդես գալ մի քանի անգամ:
Եթե extern հայտարարումը պարունակում է օբյեկտի սկզբնական արժեքի վերագրում, ապա օբյեկտը համարվում է սահմանված և նրա համար հիշողության մեջ տեղ է հատկացվում: Այդ դեպքում նույն օբյեկտի այլ հայտարարում չի թույլատրվում: Օրինակ, եթե ունենք
extern const double d1=12.5;
ապա d1 հաստատունի նորից հայտարարումը
const double d1;
կլինի սխալ:
Կյանքի տևողությունը - այն ժամանակահատվածն է, որի ընթացքում տվյալ օբյեկտը տեղ է զբաղեցնում հիշողության մեջ:
Գլոբալ օբյեկտը գոյատևում է ծրագրի կատարման սկզբից մինչև վերջ: Ծրագրի կյանքի տևողությունը սկսվում է նրա թողարկման ժամանակից մինչև ավարտը:
C++ լեզվում լոկալ օբյեկտների կյանքի տևողության տրման համար սահմանված է հիշողության երեք տիպերª ինքնաբերաբար, ռե-գիստրային և ստատիկ:
Լոկալ ինքնաբերաբար փոփոխականների համար հիշողութ- յունը առանձնացվում է անմիջապես ֆունկցիայի ակտիվացման կամ բլոկ մտնելու ժամանակ և հիշողությունը ազատվում է ֆունկցիայի ավարտի կամ բլոկից դուրս գալու ժամանակ: Այդ տիպի օբյեկտների կյանքի տևողությունը վերջանում է ֆունկցիայի ավարտի հետ միաժա-մանակ և նրա արժեքը ջնջվում է:
Ըստ լռելյայն բլոկի ներսում հայտարարված բոլոր օբյեկտները ինքնաբերաբար տիպի լոկալ օբյեկտներ են:
Ինքնաբերաբար տիպի օբյեկտները կարելի է հայտարարել register առանցքային բառով և այդ դեպքում օբյեկտը բեռնավորում է մեքենայական ռեգիստրների վրա: Իսկ եթե այդ անհնարին է, օբյեկտը մնում է հիշողության մեջ: Ռեգիստրների օգտագործումը բավականին արագացնում է ծրագրի կատարման ընթացքը: Հետևյալ կրկնական հրահանգներում օգտագործվող զանգվածների ինդեքսները և ցուցա-նշիչները հանդիսանում են ռեգիստրային տիպի օբյեկտներª
for (register int i1=0; i1<ia; i1++)
for (register int *p =array; p<arreySize; p++)
Ստատիկ լոկալ օբյեկտը, դա այնպիսի օբյեկտ է, որի համար հիշողությունը մնում է առանձնացված ծրագրի կատարման սկզբից մինչև վերջ: C++ լեզվում նախատեսված է static պահեստավորված բառը, որը հնարավորություն է տալիս լոկալ օբյեկտին վերագրել ստա-տիկ տիպ: Օրինակª
static int io;
Սովորաբար ավելի լավ է լոկալ փոփոխականը հայտարարել ստատիկ և այն օտագործել գլոբալ փոփոխականի փոխարեն, քանի որ այդ դեպքում գլոբալ փոփոխականի նման նրան հատկացված հիշո-ղությունը մնում է առանձնացված ծրագրի կատարման սկզբից մինչև վերջ, բայց այդ փոփոխականի լոկալ բնույթը արգելում է ծրագրի այլ ֆունկցիաների մուտքը իր մեջ :
Комментариев нет:
Отправить комментарий