Prostor imena u C ++-u koristi se za organiziranje koda u logičke grupe i za sprječavanje sudara imena koji se mogu dogoditi posebno kada vaša baza kodova uključuje više knjižnica. U ovom će članku biti obrađeni sljedeći smjerovi:
- Potreba za imenskim prostorom
- Definiranje prostora imena u C ++
- Bodovi koje treba upamtiti prilikom definiranja prostora imena
- Korištenje prostora imena u C ++
- Neprekidni imenski prostori
- Ugnježđeni imenski prostori
Potreba za imenskim prostorom
Uzmimo u obzir situaciju, pišemo neki kod koji ima funkciju koja se naziva abc (), a na raspolaganju je još jedna unaprijed definirana knjižnica koja također ima istu funkciju abc (). Sada u vrijeme kompilacije, kompajler nema pojma na koju verziju funkcije abc () mislimo u našem kodu.
Da bi se prevladala ova poteškoća, prostor imena je dizajniran i koristi se kao dodatna informacija za razlikovanje sličnih funkcija, varijabli, klasa itd. S istim imenom dostupnim u različitim knjižnicama. Pomoću prostora imena možemo definirati kontekst u kojem su imena definirana. U osnovi, prostor imena definira opseg.
Svi tipovi i funkcije standardne knjižnice C ++ deklarirani su u std prostoru imena ili imenskim prostorima ugniježđenim unutar std-a, stoga se široko koristi u većini programa.
Definiranje prostora imena
Da bismo definirali imenski prostor započinjemo s ključnom riječi imenski prostor nakon kojeg slijedi naziv imenskog prostora:
imenski prostor imena_prostora {int a, b // deklaracije koda gdje su // a i b deklarirani u // opsegu_ime_prostora}
Bodovi koje treba upamtiti prilikom definiranja prostora imena
- Deklaracije prostora imena pojavljuju se samo na globalnom opsegu.
- Deklaracije prostora imena nemaju specifikatore pristupa.
- Deklaracije prostora imena mogu se ugniježditi unutar drugog prostora imena.
- Nema potrebe za zarezom nakon završne zagrade definicije prostora imena.
- Definicija prostora imena može se podijeliti na nekoliko jedinica.
#include using 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 }
Izlaz:
kako stvoriti aplikaciju u salesforceu
U gornjem primjeru za definiranje funkcije func () dva različita vremena koristimo koncept prostora imena. Prvu funkciju definiramo pod prostorom imena first_function idruga funkcija pod prostorom imena second_function. Da bismo pozvali ove funkcije, koristimo operator razlučivanja opsega na sljedeći način - first_function :: func () i second_function :: func ().
Korištenje prostora imena u C ++
Postoje tri načina za korištenje prostora imena u programu,
- Direktiva o korištenju
- Deklaracija o korištenju
- Operater razlučivosti opsega (: :)
Direktiva o korištenju
Možemo izbjeći dodavanje prostora imena pomoću koristeći direktiva o imenskom prostoru. koristeći ključna riječ omogućuje nam uvoz cijelog prostora imena u vaš program s globalnim opsegom. Može se koristiti za uvoz prostora imena u drugi prostor imena ili bilo koji program prema našim zahtjevima.
Razmotrite datoteku zaglavlja Namespace_first.h:
prostor imena First {int a class First_class {int i}}
Uključujući gornju datoteku zaglavlja prostora imena u datoteku Namespace_second.h: uključite “Namespace_first.h”
imenski prostor Second {upotreba prostora imena First First_class obj int y}
Uvodimo namespace_First u namespace_Second, stoga će klasa First_class sada biti dostupna u namespace_Second. Stoga sljedeći program možemo napisati u zasebnu datoteku, recimo new_file.cpp.
#include 'namespace_second.h' void test () {using namespace Second // stvaranje objekta klase First_class First_class obj2}
Stoga , direktiva using znatno olakšava upotrebu prostora imena u C ++-u, gdje god želite.
Deklaracija o korištenju
U upotrebnoj deklaraciji uvozimo po jedno određeno ime koje je dostupno samo unutar trenutnog opsega i poziva se uz pomoć razlučivosti opsega. NAPOMENA: Ime uvezeno s using-deklaracijom može nadjačati ime uvezeno s using direktivom. To možemo vidjeti u primjeru ispod.
Razmotrimo datoteku zaglavlja New_File.h:
prostor imena First {void A () {cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }
Sada kreirajmo novu programsku datoteku s imenom New_file_2.cpp sa donjim kodom:
#include 'New_file.h' void B () {koristeći prostor imena First // pomoću direktive pomoću Second :: A // pomoću deklaracije First :: A () // klasa A () iz First namespace A () // poziva A () drugog prostora imena}
Operator razlučivosti opsega (: :)
Možemo izričito navesti bilo koje ime deklarirano u prostoru imena koristeći ime prostora prostora i razlučivost opsega ' :: ' operator s identifikatorom.
imenski prostor New_space {klasa X {static int i public: void func ()} // deklaracija imena klase klasa Y} // Inicijalizacija statičke varijable klase int New_space :: X :: i = 23 klasa New_space :: Y {int a public: int getdata () {cout<< a } // Constructor declaration Y() } // Constructor definition explicitly New_space::Y::Y() { a=0 }
Neprekidni prostor imena na C ++
Kao što znamo, prostor imena u C ++-u može se definirati u nekoliko dijelova, tako da se sastoji od zbroja njegovih zasebno definiranih dijelova. Dakle, ako jedan dio prostora imena zahtijeva ime definirano u drugoj datoteci, to ime i dalje mora biti deklarirano u svom opsegu. Pisanje sljedećeg prostora imena na sljedeći način ili definira novi prostor imena ili dodaje nove elemente postojećem:
imenski prostor namespace_name {// tijelo koda}
Ugnježđeni prostor imena u C ++
Prostori imena mogu se lako ugnijezditi i možemo definirati jedan prostor imena unutar drugog prostora imena na sljedeći način:
namespace namespace_name1 {// tijelo koda namespace_name1 namespace names_name2 {// tijelo koda ugniježđeno namamespace_name2}}
Ovim dolazimo do kraja Imena prostora u članku C ++. Nadam se da ste dobili ideju što je točno prostor imena u C ++-u i koji su različiti načini njegovog definiranja. Ako želite saznati više, pogledajte Edureka, pouzdane tvrtke za internetsko učenje. Edurekin tečaj za obuku i certificiranje Java J2EE i SOA osmišljen je kako bi vas osposobio za osnovne i napredne Java koncepte zajedno s raznim Java okvirima poput Hibernate & Spring.
Imate pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare ovog bloga i javit ćemo vam se što je prije moguće.