Alt du trenger å vite om navneområdet i C ++



Denne artikkelen vil gi deg detaljert og omfattende kunnskap om Namespace i C ++. Det er forskjellige typer og bruksområder i ethvert program.

Navneområdet i C ++ brukes til å organisere kode i logiske grupper og for å forhindre navnekollisjoner som kan oppstå, spesielt når kodebasen din inneholder flere biblioteker. I denne artikkelen vil følgende pekere bli dekket:

Behovet for Namespace

Tenk på en situasjon, vi skriver litt kode som har en funksjon kalt abc (), og det er et annet forhåndsdefinert bibliotek tilgjengelig som også har samme funksjon abc (). Nå på tidspunktet for kompilering har kompilatoren ingen anelse om hvilken versjon av abc () -funksjonen vi refererer til i koden vår.





Navneområde i c ++

For å overvinne denne vanskeligheten er navneområdet designet og brukes som tilleggsinformasjon for å skille lignende funksjoner, variabler, klasser, etc. med samme navn tilgjengelig i forskjellige biblioteker. Ved å bruke navneområdet kan vi definere konteksten der navnene er definert. I hovedsak definerer et navneområde et omfang.



Alle C ++ standard bibliotektyper og funksjoner blir deklarert i std navneområdet eller navneområdene nestet inne i std, så det er mye brukt i de fleste av programmene.

hvordan du bruker sett i java

Definere et navneområde

For å definere navneområdet begynner vi med søkeordnavnet, etterfulgt av navnet på navneområdet som følger:

namespace namespace_name {int a, b // kodedeklarasjoner der // a og b er deklarert i // namespace_name's scope}

Poeng å huske når du definerer et navneområde

  • Navneområdedeklarasjoner vises bare i globalt omfang.
  • Navneromsdeklarasjoner har ikke tilgangsspesifikatorer.
  • Navneområdedeklarasjoner kan nestes i et annet navneområde.
  • Du trenger ikke å gi semikolon etter den avsluttende avstivningen av definisjonen av navneområdet.
  • Definisjon av navneområdet kan deles over flere enheter.
#include ved å bruke namespace std namespace first_function {void func () {cout<< '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 }

Produksjon:



I eksemplet ovenfor for å definere func () -funksjonen to forskjellige tider, bruker vi namespace-konseptet. Vi definerer den første funksjonen under navneområdet first_function ogandre funksjon under navneområdet second_function. For å kalle disse funksjonene bruker vi omfangsoppløsningsoperator på følgende måte - first_function :: func () og second_function :: func ().

Bruker navneområdet i C ++

Det er tre måter å bruke et navneområde i programmet på,

  1. Bruksdirektivet
  2. Brukserklæringen
  3. Scope Resolution Operator (: :)

Bruksdirektivet

Vi kan unngå å forberede navnerom med ved hjelp av navneromdirektivet. ved hjelp av nøkkelord lar oss importere et helt navneområde til programmet ditt med et globalt omfang. Den kan brukes til å importere et navneområde til et annet navneområde eller et hvilket som helst program i henhold til vårt krav.

Vurder en overskriftsfil Namespace_first.h:

navneområde First {int a class First_class {int i}}

Inkludert ovennevnte navneområdet topptekstfil i Namespace_second.h fil: inkluderer 'Namespace_first.h'

namespace Second {ved å bruke namespace First First_class obj int y}

Vi importerer namespace_First til namespace_Second, derav klasse First_class vil nå være tilgjengelig i namespace_Second. Derfor kan vi skrive følgende program i en egen fil, la oss si new_file.cpp.

#include 'Namespace_second.h' void test () {ved å bruke namespace Second // lage objekt av klasse First_class First_class obj2}

Derfor , bruker direktivet det mye enklere å bruke et navneområde i C ++, hvor du vil.

Brukserklæringen

I brukserklæringen importerer vi ett spesifikt navn om gangen som bare er tilgjengelig innenfor gjeldende omfang, og det kalles ved hjelp av omfangsoppløsning. MERKNAD: Navnet som importeres med en brukserklæring, kan overstyre navnet som importeres med direktivet. Vi kan se dette i eksemplet nedenfor.

La oss vurdere en topptekstfil New_File.h:

namespace First {void A () {cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }

La oss nå lage en ny programfil med navnet New_file_2.cpp med koden nedenfor:

#include 'New_file.h' ugyldig B () {ved å bruke navneområdet First // bruke direktivet ved å bruke Second :: A // ved å bruke erklæring First :: A () // klasse A () i First namespace A () // anrop A () av ​​andre navneområde}

Omfangsoppløsningsoperatør (: :)

Vi kan eksplisitt spesifisere ethvert navn som er erklært i et navneområde ved hjelp av navnefeltets navn og omfangsoppløsningen :: ' operatøren med identifikatoren.

hvordan du bruker navneområdet i c ++
navneområde New_space {class X {static int i public: void func ()} // class name declaration class Y} // Initializing static class variable int New_space :: X :: i = 23 class New_space :: Y {int a public: int getdata () {cout<< a } // Constructor declaration Y() } // Constructor definition explicitly New_space::Y::Y() { a=0 }

Discontiguous Namespace in C ++

Som vi vet kan et navneområde i C ++ defineres i flere deler, slik at det består av summen av de separat definerte delene. Så hvis en del av navneområdet krever et navn definert i en annen fil, må navnet fremdeles erklæres i omfanget. Å skrive følgende navneområde på følgende måte definerer enten et nytt navneområde eller legger til nye elementer til et eksisterende:

namespace namespace_name {// code body}

Nestet navneplass i C ++

Navneplasser kan enkelt nestes, og vi kan definere ett navneområde i et annet navneområde som følger:

namespace namespace_name1 {// code body of namespace_name1 namespace namespace_name2 {// code body nestet namamespace_name2}}

Med dette kommer vi til en slutt på Namespace in C ++ - artikkelen. Jeg håper du fikk en ide om hva som egentlig er et navneområde i C ++ og hva er de forskjellige måtene å definere det på. Hvis du ønsker å lære mer, sjekk ut av Edureka, et pålitelig online læringsfirma. Edurekas Java J2EE- og SOA-opplæring og sertifiseringskurs er designet for å trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige Java-rammer som Hibernate & Spring.

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet på denne bloggen, så kommer vi tilbake til deg så snart som mulig.