namespaces c
Комплетан преглед простора имена на језику Ц ++ са једноставним примерима.
питања и одговори на интервјуу аналитичара за осигурање квалитета
До сада смо у нашим претходним водичима видели све о променљивим, декларацијама, функцијама и другим таквим ентитетима који се користе у Ц ++.
Док се развијају апликације у Ц ++-у, могу настати неке необичне ситуације као што су иста имена променљивих која се користе два пута или функције дефинисане истим прототиповима итд. Када се појаве ови сценарији, компајлеру постаје тешко да изведе тачну позивну променљиву или функцију која доводи до двосмислености .
=> Овде погледајте савршен водич за обуку за Ц ++.
Шта ћете научити:
- Шта је простор имена?
- Дефинисање простора имена
- Приступ члановима простора имена
- Директива о коришћењу
- Угнездени простори имена
- Спољни именски простори
- Непрекидни именски простори
- Закључак
- Препоручено читање
Шта је простор имена?
Погледајмо доњи пример:
#include #include int main() { int var; double var; std::cin>>var; }
Излаз:
У функцији „инт маин ()“:
8:10: грешка: неусаглашена декларација „дупли вар“
7: 7: напомена: претходна декларација као „инт вар“
У горњем примеру смо дефинисали две променљиве са различитим типовима, али са истим идентификатором. Дакле, када компајлирамо овај пример, добијамо грешку као што је приказано у прозору Оутпут. Ове сукобљене декларације настају због истог идентификатора који се користи за именовање две променљиве.
Ова врста ситуација доводи до двосмислености у апликацијама.
Ц ++ представља нешто што се зове „ просторима имена ”Да бисте решили овај проблем. Простор имена у Ц ++-у је попут пакета или регије или библиотеке која се користи за разликовање променљиве или функција са истим идентификаторима.
Простор имена може садржати променљиве, функције, класе или друге објекте, па чак и други простор имена. На сваки члан простора имена може се упутити помоћу простора простора имена. Ово помаже компајлеру да разликује различите програмске целине чак и ако имају иста имена.
Дефинисање простора имена
У Ц ++-у можемо дефинисати простор имена користећи кључну реч „ простор имена ' како је приказано испод:
namespace namespace_name{ namespace_declarations; }
Дакле, ако треба да дефинишемо простор имена под називом „тест_спаце“, можемо то учинити на следећи начин:
namespace test_space{ int var=10; }
Горња декларација дефинише простор имена под називом „тест_спаце“. Као што је приказано, члан има целобројну променљиву вар.
Приступ члановима простора имена
Сада смо дефинисали сопствени простор имена „тест_спаце“ и како приступити садржају овог простора имена?
У програму Ц ++ можемо приступити члановима простора имена користећи синтаксу:
namespace_name::namespace_member;
Тако се целобројној променљивој вар декларисаној у простору имена „тест_спаце“ горе може приступити на следећи начин:
test_space::var;
Погледајте доњи пример у наставку да бисте демонстрирали просторе имена и њихову употребу.
#include #include namespace test_space{ int var = 10; } int main() { double var = 20.53; std::cout<<'local var = '< Излаз:
локални вар = 20,53
тест_спаце :: вар = 10
Све о стварању и приступу именском простору показали смо у горенаведеном примеру програмирања. Као што видимо, „тест_спаце“ је простор имена који смо дефинисали. У њему је дефинисана једна целобројна променљива вар. Тада у главној функцији имамо још једну двоструку променљиву вар која је иницијализована.
Касније ћемо приказати обе ове променљиве. Имајте на уму да, иако се локална двострука променљива унутар главне може директно штампати, да бисмо исписали променљиву простора имена, морамо јој додати испред имена простора имена.
Ово је такође водило рачуна о проблему сукоба између променљивих због истих имена о којима смо раније разговарали.
Директива о коришћењу
У претходној теми видели смо да члановима простора имена можемо приступити помоћу намеспаце_наме :: намеспаце_мембер.
Ако не желимо да наведемо име простора имена свуда у програму, можемо користити „ Користећи ”Директива за укључивање простора имена у програм.
То се ради на следећи начин:
#include #include namespace test_space{ int var = 10; } using namespace std; using namespace test_space; int main() { double var = 20.53; cout<<'local var = '< Излаз:
локални вар = 20,53
тест_спаце :: вар = 10
У горњем примеру, користили смо две изјаве након дефинисања простора имена „тест_спаце“.
Су:
које је најбоље средство за чишћење рачунара
using namespace std; using namespace test_space;
Прва изјава користи декларацију за приступ простору имена „стд“ који је унапред дефинисани стандардни простор имена у библиотеци Ц ++. Овај простор имена користи се за приступ разним функцијама попут цин, цоут итд.
Друга изјава се користи за укључивање простора имена „тест_спаце“ у програм.
У главној функцији можемо видети да функцијама као што су цоут и променљива вар не мора претходити име простора имена. Можемо се директно позвати на њих. Али како вар има сукоб имена са локалном променљивом у главној функцији, упућујемо га помоћу оператора резолуције опсега (: :), јер именски простори такође увек имају глобални опсег.
Угнездени простори имена
Ц ++ такође дозвољава угнежђени простор имена, тј. Простор имена дефинисан у другом простору имена.
Општа синтакса угнежђених простора имена је следећа:
namespace ns1{ ns1_code; namespace ns2{ ns2_code; } }
Ако треба да приступимо нс2_цоде, онда можемо да му приступимо на следећи начин:
ns1::ns2::ns2_code;
Демонстрирајмо угнежђене просторе имена користећи следећи пример кода.
#include #include namespace first{ int var = 10; namespace second{ int secVar = 20; } } using namespace std; using namespace first; using namespace first::second; int main() { double var = 20.53; cout<<'local var = '< Излаз:
локални вар = 20,53
прво :: вар = 10
друго :: вар = 20
У горе наведеном програму користили смо угнежђене просторе имена. Обратите пажњу на начин на који се употреба директиве користи за приступ именским просторима. Није довољно само једном упутити само најунутарњи простор имена. Ако нам је потребан код из најудаљенијег простора имена, онда га морамо упутити одвојено.
Можемо користити друго име за просторе имена познате као „алиас“. Ово је посебно корисно док користите угнежђене просторе имена, а степен угнежђења је висок.
Псеудоним за простор имена можемо демонстрирати модификујући горњи Пример.
#include #include namespace first{ int var = 10; namespace second{ int secVar = 20; } } using namespace std; using namespace first; namespace nested = first::second; int main() { double var = 20.53; cout<<'local var = '< Излаз:
локални вар = 20,53
прво :: вар = 10
друго :: вар = 20
Обратите пажњу на угнежђени алиас који је дефинисан за простор имена фирст :: сецонд. Једном када је псеудоним дефинисан, можемо се онда позвати на простор имена користећи псеудоним.
Спољни именски простори
Понекад када имамо превише простора имена да бисмо их користили у нашој апликацији, можда бисмо желели да све просторе имена поставимо у засебну датотеку. То се лако може учинити. Када су именски простори у посебној датотеци, ми их само уврстимо у наш програм, а затим директно користимо именске просторе и његов садржај у нашем програму.
На пример, ако имамо датотеку која се зове нс.х која садржи следећи простор имена.
//ns.h namespace first{ int var = 25; }
Сада у нашем програму можемо користити простор имена „први“ на следећи начин:
#include #include “ns.h” using namespace std; int main() { cout<Дакле, након што у наш програм укључимо датотеку која садржи просторе имена, просторе имена можемо користити као да су глобално декларисани у истом програму.
Непрекидни именски простори
Ц ++ нам такође омогућава да дефинишемо нешто што се назива суседним именским просторима. Непрекидни именски простори су именски простори који се дефинишу више пута истим именом. У стварности то нису одвојени именски простори већ проширења истог именског простора.
Непрекидни простори имена евидентни су у доњем примеру.
#include #include . namespace first{ int var = 10; } namespace first{ namespace second{ int secVar = 20; } } using namespace std; using namespace first; namespace nested = first::second; int main() { double var = 20.53; cout<<'local var = '< Излаз:
локални вар = 20,53
најбољи софтвер за претварање гласа у текст
прво :: вар = 10
друго :: вар = 20
Приметите у горњем примеру да смо исти простор имена дефинисали два пута. У првој дефиницији имамо променљиву која се зове вар. Док смо у другој декларацији дефинисали још један простор имена.
У главној функцији приступили смо члановима спољног и унутрашњег простора имена и напомињемо да се члановима лако приступа.
Ово је пример суседних простора имена, који је понекад познат и као „прекидни простори имена“. Њихове дефиниције изгледају одвојено, али у стварности су то непрекидни именски простори.
Закључак
Овим смо дошли до краја овог водича о именским просторима на Ц ++. Простори имена на један начин који нам омогућава да раздвојимо наш код у различитим просторима или регионима, тако да имамо јасност у читању и коришћењу његових чланова.
У нашим наредним водичима научићемо више о разним основним темама Ц ++-а попут руковања изузецима, уноса / излаза датотека итд.
=> Погледајте овде да бисте видели А-З од Ц ++ туторијала за обуку овде.
Препоручено читање
- Најбољи БЕСПЛАТНИ водичи за Ц #: Крајњи водич за Ц # за почетнике
- Испитивање оптерећења помоћу ХП ЛоадРуннер водича
- Библиотечке функције у Ц ++
- 70+ НАЈБОЉИХ Водича за Ц ++ за БЕСПЛАТНО учење Ц ++ програмирања
- Објектно оријентисано програмирање на језику Ц ++
- Листе иницијализатора у језику Ц ++
- Итератори у СТЛ-у
- Инкапсулација у Ц ++