Ц ++

Ц ++ простор имена

Ц ++ простор имена
Простор имена у Ц ++-у је уопштени опсег. Његова декларација започиње резервисаном речју, именским простором, затим именом по избору програмера, а затим блоком у заградама. Блок садржи основне декларације и / или дефиниције Ц ++ објеката, функција и других ентитета.

Размотрите следеће две скаларне изјаве у глобалном опсегу, у следећем програму:

#инцлуде
коришћење простора имена стд;
инт варИд = 5;
флоат варИд = 2.3;
инт маин ()

ретурн 0;

Покушај компајлирања овог програма доводи до грешке у компилацији. Постоје две променљиве са истим именом, ВарИд. Иако су то две различите променљиве два различита типа, инт и пловак, састављач одбацује две декларације јер су истоимене. Следећи програм решава овај проблем декларисањем променљивих са истим именом у два различита уопштена опсега:

#инцлуде
коришћење простора имена стд;
простор имена НА

инт варИд = 5;

простор имена НБ

флоат варИд = 2.3;

инт маин ()

цоут << NA::varId << '\n';
цоут << NB::varId << '\n';
ретурн 0;

Излаз је следећи:

5
2.3

У горњем програму постоје два именска простора: НА, који има дефиницију целог броја и НБ, која има дефиницију флоат-а, али са истим именом као цео број за НА. Коначно, када је програм покренут, коришћено је исто име за две различите променљиве. Имајте на уму да се за приступ истом имену две различите променљиве мора користити одређено име за простор имена, праћено заједничким идентификатором. Име простора имена и заједнички идентификатор раздваја оператер резолуције опсега, “::.”Име простора имена разликоваће објекте.

Овај чланак покрива основни концепт простора имена и његову употребу у програмском језику Ц ++. Да бисте пратили овај чланак, требало би да имате основно знање језика Ц ++. Такође бисте требали имати знање о опсегу Ц ++, мада је то укратко објашњено у овом чланку. Да бисте сазнали више о опсегу Ц ++, потражите фразу „Обим у Ц ++“ (без наводника) у пољу за претрагу било ког линукхинт-а.цом и притисните Ентер. Ово ће вас одвести до чланка који је овај аутор написао.

Садржај чланка

Шта је простор имена?

Декларативна регија је највећи део програма у коме важи назив ентитета (променљиве). Овај регион се назива опсег. Простор имена у Ц ++-у је уопштени опсег чија је главна сврха решавање сукоба имена. Простор имена има основне декларације и / или дефиниције ентитета.

Глобални простор имена и његов проблем

Глобални простор имена је глобални опсег. Размотрите следећи кратки програм:

#инцлуде
коришћење простора имена стд;
инт идент = 55;
флоат идент = 12.17;
инт маин ()

ретурн 0;

У горњем програму постоје две променљиве, обе позване идент. Ове променљиве су у глобалном опсегу; односно налазе се у глобалном простору имена. Покушај компајлирања овог програма неће успети са поруком о грешци. Глобални опсег не прихвата више од једне променљиве са истим именом, па постоји потреба за прилагођеним простором имена.

Прилагођени простор имена

Простор имена нема само једно име. Уместо тога, простор имена има скуп имена како би се избегао сукоб са другим скуповима имена. Да бисте избегли сукоб ниже у коду, испред сваког имена додајте име простора имена и :: . Следећи програм то илуструје помоћу два прилагођена простора имена:

#инцлуде
коришћење простора имена стд;
простор имена НА

инт варИнт = 6;
флоат флт;

простор имена НБ

инт варИнт = 7;
флоат флт;

инт маин ()

цоут << NA::varInt << '\n';
цоут << NB::varInt << '\n';
НА :: флт = 2.5;
НБ: флт = 4.8;
цоут << NA::flt << '\n';
цоут << NB::flt << '\n';
ретурн 0;

Излаз је:

6
7
2.5
4.8

Имајте на уму да имена НА :: флт и НБ: флт су на крају дефинисани у главни() функцију. Ц ++ не дозвољава такву дефиницију у глобалном опсегу.

Имајте на уму да је прилагођени простор имена угнежђени простор имена за глобални простор имена.

Директива о коришћењу

Да бисте избегли да стално куцате „намепаце :: наме“, уместо само „наме“ након декларације простора имена, можете користити Користећи директива. Синтакса за употребу Користећи Директива је следећа:

коришћење простора имена Наме_простор;

Тхе Користећи директива није претпроцесорска директива, па се завршава тачком и зарезом (;).

Следећи програм илуструје употребу Користећи директива и још много тога:

#инцлуде
коришћење простора имена стд;
простор имена НБ

инт варИнт = 7;
инт фунц ()

ретурн варИнт;


инт фн ()

коришћење простора имена НБ;
инт миВар2 = фунц ();
// следе други објекти и функције из НБ-а.
ретурн миВар2;

инт миВар3 = НБ :: фунц ();
инт маин ()

цоут << fn() << " << myVar3 << '\n';
ретурн 0;

Резултат овог програма је 7 7. Термин "коришћење простора имена НБ;”Је постављен на почетак фн () дефиниција. Тхе фунц () из простора имена НБ зове се одмах испод тога, без претходне речи „НБ ::.”

Променљива декларисана у глобалном опсегу (глобални простор имена) види се од тачке декларације до краја датотеке. Такође се види у угнежђеним просторима имена (угнежђени опсези), попут угнежђених фн () опсег функције горе. Тхе Користећи директива спаја свој простор имена од положаја на којем је постављена до краја опсега у који је постављена.

Име фунц () из простора имена НБ не може се видети испод фн () дефиниција јер „користећи простор имена НБ; ” је смештено у опсег функције (блок). Под овим условом, користити „фунц ()”Изван блока простора простора НБ (опсега) мора му претходити„НБ ::,”Као у следећој изјави:

инт миВар3 = НБ :: фунц ();

Тхе Користећи директива спаја свој простор имена са спољним простором имењака од положаја на којем је постављена до краја спољног простора гнежђења. У следећем програму, простор имена НА придружен је глобалном простору имена. Оба именска простора се затим проширују на фн () простор имена имена дефиниције, у којем су спојени са простором имена НБ. НБ простор имена завршава се на крају фн () дефиниција функције, а два претходна именска простора настављају се до краја датотеке (прочитати кроз код).

#инцлуде
коришћење простора имена стд;
простор имена НА

инт варИнт = 6;
инт фунц ()

ретурн варИнт;


простор имена НБ

инт варИнт = 7;
инт фунц ()

ретурн варИнт;


коришћење простора имена НА;
инт миВар0 = варИнт;
// следе други објекти и функције :: и НБ.
инт фн ()

инт миВар1 = варИнт;
коришћење простора имена НБ;
инт миВар2 = НБ :: фунц ();
// следе други објекти и функције из НБ, до краја овог опсега.
ретурн миВар1 + миВар2;

// Следе само објекти и функције из :: и НБ.
инт миВар3 = НБ :: фунц ();
инт маин ()

цоут << myVar0 << " << fn() << " << myVar3 << '\n';
ретурн 0;

Излаз је 6, 13, 7.

Белешка: Глобални простор имена означен је са :: , што значи да пре оператора резолуције опсега не постоји ништа што следи.

Испод изјаве, „коришћење простора имена НА;”Променљиве из глобалног и НА простора простора могу се користити без назнаке њиховог изворног простора имена. Следећа изјава користи варИнт простора имена НА. Глобални и НА комбиновани простор простора имена простире се на фн () простор имена функција. Дакле, варИнт прве изјаве у фн () опсег функције је простора имена НА.

Пошто се регион за глобални и НА простор простора простире широм фн () опсег, након „инт миВар2 = НБ :: фунц ();,”Било које име из НБ простора имена може се користити само у фн () опсег, а да му не претходиНБ ::,”Само ако се није десило у НА и глобалним именским просторима (блоковима). У супротном, томе треба претходити „НБ ::.”Регија комбинованих простора имена за НА и глобал наставља се испод фн () дефиниција и у главни() функција до краја датотеке.

Проширење простора имена НБ почиње од „инт миВар2 = НБ :: фунц ();”У фн () блок и завршава се на крају фн () блок дефиниције.

Белешка: Простори имена чији су региони спојени не би требало да имају исто име променљиве у својим различитим блоковима именског простора, јер би то и даље узроковало сукоб.

Региони простора простора

Простор имена је опсег. Осим глобалног простора имена (глобални опсег), сваки простор имена треба декларисати у блоку. Тај блок је први део могуће дистрибуираних региона простора имена. Помоћу директиве усинг, простор имена може се проширити као региони у другим опсезима.

За ентитете декларисане у телу простора имена каже се да су чланови простора имена, а за имена која су уведене овим декларацијама у декларативну регију простора имена именују се чланови имена простора.

Угнездени простори имена

Следећи програм приказује угнежђене просторе имена:

#инцлуде
коришћење простора имена стд;
простор имена А

инт и = 1;
простор имена Б

инт и = 2;
простор имена Ц

инт и = 3;



инт маин ()

цоут << A::i << " << A::B::i << " << A::B::C::i << '\n';
ретурн 0;

Излаз је:

1 2 3

Приметите да су се овим вредностима приступило помоћу оператора резолуције опсега.

Стандардни простор имена

Ц ++ има библиотеку која се назива стандардна библиотека. Имена објеката, функција и других ентитета у овој библиотеци потичу из простора имена који се назива стандардни простор имена, написан као стд. Стандардна библиотека садржи подбиблиотеке, а једна од ових подбиблиотека је иостреам. Тхе иостреам библиотека садржи објекат цоут, који се користи за слање резултата на конзолу (терминал).

Име цоут мора бити у стд простор имена. Користити иостреам са својим стд простора имена, програм треба да буде следећи:

#инцлуде
коришћење простора имена стд;

Обратите пажњу на употребу Користећи директива и стд. Термин "#инцлуде ”Је претпроцесорска директива и не завршава се тачком и зарезом. Укључује иостреам „датотеку“ на месту своје директиве.

Закључак

Простор имена је опсег. Опис (дефиниција) простора имена садржи основне декларације и / или дефиниције Ц ++ објеката, функција и других ентитета. Изван дефиниције простора имена, имену се може приступити синтаксом, „намеспацеНаме :: наме.”Осим глобалног простора имена (глобални опсег), сваки простор имена треба декларисати у блоку. Тај блок је први део могуће дистрибуираних региона простора имена. Са Користећи директиве, простор имена може се проширити као региони у другим опсезима. Простори имена чија су подручја спојена не би требало да имају исто име променљиве у својим различитим блоковима именског простора, јер би то и даље узроковало сукоб имена.

Цхрис

Водич за сенку Томб Раидера за Линук
Схадов оф тхе Томб Раидер је дванаести додатак серији Томб Раидер - акцијско-авантуристичкој игри коју је створио Еидос Монтреал. И критичари и фанови...
Како појачати ФПС у Линуку?
ФПС је скраћеница за Фрејмова у секунди. Задатак ФПС-а је да мери брзину кадрова у репродукцијама видео записа или играчким перформансама. Једноставни...
Најпопуларније лабораторијске игре Оцулус Апп
Ако сте власник Оцулус слушалица, онда морате бити упознати са бочним учитавањем. Бочно учитавање је поступак инсталирања не-продавничког садржаја на ...