Простор имена у Ц ++-у користи се за организовање кода у логичке групе и за спречавање судара имена који могу да се појаве нарочито када ваша база кода укључује више библиотека. У овом чланку биће обрађени следећи смерници:
- Потреба за именским простором
- Дефинисање простора имена у језику Ц ++
- Тачке које треба запамтити приликом дефинисања простора имена
- Коришћење простора имена у Ц ++
- Непрекидни именски простори
- Угнездени простори имена
Потреба за именским простором
Узмимо у обзир ситуацију, пишемо неки код који има функцију која се назива абц (), а на располагању је још једна унапред дефинисана библиотека која такође има исту функцију абц (). У време компајлирања, компајлер нема појма на коју верзију функције абц () мислимо у нашем коду.
Да би се превазишла ова потешкоћа, простор имена је дизајниран и користи се као додатна информација за разликовање сличних функција, променљивих, класа итд. Са истим именом доступним у различитим библиотекама. Користећи простор имена, можемо дефинисати контекст у којем су имена дефинисана. У основи, простор имена дефинише опсег.
Сви типови и функције стандардне библиотеке Ц ++ декларисани су у стд простору имена или именским просторима угнежђеним унутар стд-а, па се зато широко користи у већини програма.
како научити визуелни студио
Дефинисање простора имена
Да бисмо дефинисали простор имена, започињемо са кључном речи имен простора, а затим именом простора простора на следећи начин:
намеспаце намеспаце_наме {инт а, б // декларације кода где су // а и б декларисани у // намеспаце_наме'с сцопе}
Тачке које треба запамтити приликом дефинисања простора имена
- Декларације простора имена појављују се само на глобалном опсегу.
- Декларације простора имена немају спецификаторе приступа.
- Декларације простора имена могу се угнездити у други простор имена.
- Нема потребе да дајете тачку и зарез након завршне заграде дефиниције простора имена.
- Дефиниција простора имена може се подијелити на неколико јединица.
#инцлуде усинг намеспаце стд намеспаце фирст_фунцтион {воид фунц () {цоут<< 'Inside first_function' << endl } } namespace second_function { void func() { cout << 'Inside second_function' << endl } } int main () { // Calls function from first name space. first_function::func() // Calls function from second name space. second_function::func() return 0 }
Излаз:
У горњем примеру за дефинирање функције фунц () два различита времена користимо концепт простора имена. Прву функцију дефинишемо под простором имена фирст_фунцтион идруга функција под простором имена сецонд_фунцтион. Да бисмо позвали ове функције, користимо оператор резолуције опсега на следећи начин - фирст_фунцтион :: фунц () и сецонд_фунцтион :: фунц ().
Коришћење простора имена у Ц ++
Постоје три начина за употребу простора имена у програму,
- Директива о коришћењу
- Декларација о употреби
- Оператер резолуције опсега (: :)
Директива о коришћењу
Можемо да избегнемо додавање простора имена помоћу Користећи директива о именском простору. Користећи Кључна реч нам омогућава да у ваш програм увеземо читав простор имена са глобалним опсегом. Може се користити за увоз простора имена у други простор имена или било који програм према нашим захтевима.
Размислите о заглављу датотеке Намеспаце_фирст.х:
именски простор Фирст {инт а цласс Фирст_цласс {инт и}}
Укључујући горњу датотеку заглавља простора имена у датотеку Намеспаце_сецонд.х: укључите „Намеспаце_фирст.х“
намеспаце Сецонд {употреба простора имена Фирст Фирст_цласс обј инт и}
Уводимо намеспаце_Фирст у намеспаце_Сецонд, стога ће класа Фирст_цласс сада бити доступна у намеспаце_Сецонд. Отуда можемо да напишемо следећи програм у засебну датотеку, рецимо нев_филе.цпп.
#инцлуде 'намеспаце_сецонд.х' воид тест () {усинг намеспаце Сецонд // стварање објекта класе Фирст_цласс Фирст_цласс обј2}
Стога , употреба директиве много олакшава употребу простора имена у Ц ++-у, где год желите.
Декларација о употреби
У декларацији усинг увозимо по једно одређено име које је доступно само унутар тренутног опсега и позива се помоћу резолуције опсега. НАПОМЕНА: Име увезено помоћу усинг-декларације може заменити име увезено помоћу усинг директиве. То можемо видети у доњем примеру.
Размотримо датотеку заглавља Нев_Филе.х:
простор имена Фирст {воид А () {цоут<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }
Сада креирајмо нову програмску датотеку са именом Нев_филе_2.цпп са доњим кодом:
#инцлуде 'Нев_филе.х' воид Б () {користећи простор имена Фирст // користећи директиву користећи Сецонд :: А // користећи декларацију Фирст :: А () // класа А () из Фирст намеспаце А () // позива А () другог простора имена}
Оператор резолуције опсега (: :)
Можемо изричито навести било које име декларисано у простору имена користећи име простора простора и резолуцију опсега “ :: ' оператор са идентификатором.
добити величину низа јавасцрипт
простор имена Нев_спаце {класа Кс {статички инт и публиц: воид фунц ()} // декларација имена класе класа И} // Иницијализација променљиве статичке класе инт Нев_спаце :: Кс :: и = 23 класа Нев_спаце :: И {инт а публиц: инт гетдата () {цоут<< a } // Constructor declaration Y() } // Constructor definition explicitly New_space::Y::Y() { a=0 }
Непрекидни простор имена на језику Ц ++
Као што знамо простор имена у Ц ++-у може се дефинисати у неколико делова, па је тако састављен од збира његових засебно дефинисаних делова. Дакле, ако један део простора имена захтева име дефинисано у другој датотеци, то име и даље мора бити декларисано у свом опсегу. Писање следећег простора имена на следећи начин или дефинише нови простор имена или додаје нове елементе постојећем:
намеспаце намеспаце_наме {// тело кода}
Угњежђени простор имена у Ц ++
Простори имена могу се лако угнездити и можемо дефинирати један простор имена унутар другог простора имена на следећи начин:
намеспаце намеспаце_наме1 {// боди цоде оф намеспаце_наме1 намеспаце намес_наме2 {// боди цоде угнијежђено намамеспаце_наме2}}
Овим смо дошли до краја простора имена у чланку Ц ++. Надам се да сте добили идеју шта је тачно простор имена у Ц ++-у и који су различити начини његовог дефинисања. Ако желите да сазнате више, погледајте Едурека, поуздана компанија за учење на мрежи. Едурекин курс за обуку и сертификацију Јава Ј2ЕЕ и СОА осмишљен је тако да вас оспособи за основне и напредне Јава концепте заједно са разним Јава оквирима попут Хибернате & Спринг.
Имате питање за нас? Молимо вас да га помените у одељку за коментаре на овом блогу и јавићемо вам се што је пре могуће.