Obor názvov v jazyku C ++ sa používa na usporiadanie kódu do logických skupín a na zabránenie kolíziám názvov, ku ktorým môže dôjsť najmä vtedy, keď vaša základňa kódov obsahuje viac knižníc. V tomto článku sa budeme zaoberať nasledujúcimi ukazovateľmi:
- Potreba menného priestoru
- Definovanie menného priestoru v C ++
- Body, ktoré si treba pamätať pri definovaní menného priestoru
- Používanie menného priestoru v C ++
- Nespojité menné priestory
- Vnorené menné priestory
Potreba menného priestoru
Uvažujme o situácii, píšeme nejaký kód, ktorý má funkciu nazvanú abc () a je k dispozícii ďalšia preddefinovaná knižnica, ktorá má tiež rovnakú funkciu abc (). Teraz v čase kompilácie kompilátor vôbec netuší, na ktorú verziu funkcie abc () v našom kóde odkazujeme.
Na prekonanie tejto ťažkosti je navrhnutý menný priestor, ktorý sa používa ako ďalšia informácia na odlíšenie podobných funkcií, premenných, tried atď. S rovnakým názvom, aký je k dispozícii v rôznych knižniciach. Pomocou menného priestoru môžeme definovať kontext, v ktorom sú definované názvy. Obor mien v podstate definuje rozsah.
Všetky štandardné typy a funkcie knižnice v C ++ sú deklarované v mennom priestore std alebo v menných priestoroch vnorených do std, takže je vo väčšine programov široko používaný.
je magisterský a postgraduálny stupeň
Definovanie menného priestoru
Pri definovaní menného priestoru začíname s menným priestorom kľúčových slov, za ktorým nasleduje názov menného priestoru nasledovne:
namespace namespace_name {int a, b // deklarácie kódu, kde // a a b sú deklarované v // rozsahu menného priestoru}
Body, ktoré si treba pamätať pri definovaní menného priestoru
- Vyhlásenia menného priestoru sa objavujú iba v globálnom rozsahu.
- Vyhlásenia menného priestoru nemajú špecifikátory prístupu.
- Deklarácie menného priestoru môžu byť vnorené do iného menného priestoru.
- Po koncovej zátvorke definície priestoru mien nie je potrebné dávať bodkočiarku.
- Definíciu menného priestoru je možné rozdeliť na niekoľko jednotiek.
#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 }
Výkon:
Vo vyššie uvedenom príklade na definovanie funkcie func () dva rôzne časy použijeme koncept menného priestoru. Prvú funkciu definujeme pod menným priestorom first_function adruhá funkcia v mennom priestore second_function. Na volanie týchto funkcií používame operátor rozlíšenia rozsahu nasledujúcim spôsobom - first_function :: func () a second_function :: func ().
Používanie menného priestoru v C ++
Existujú tri spôsoby, ako využiť menný priestor v programe,
- Smernica o používaní
- Vyhlásenie o použití
- Prevádzkovateľ riešenia rozsahu (: :)
Smernica o používaní
Predchádzaniu predpripravovaniu menných priestorov pomocou použitím smernica o mennom priestore. použitím kľúčové slovo nám umožňuje importovať do vášho programu celý priestor mien s globálnym rozsahom. Môže sa použiť na import menného priestoru do iného menného priestoru alebo ľubovoľného programu podľa našich požiadaviek.
Zvážte hlavičkový súbor Namespace_first.h:
namespace First {int a class First_class {int i}}
Vrátane vyššie uvedeného hlavičkového súboru menného priestoru do súboru Namespace_second.h: zahrnúť „Namespace_first.h“
namespace Second {using namespace First First_class obj int y}
Importujeme namespace_First do namespace_Second, takže trieda First_class bude teraz k dispozícii v namespace_Second. Preto môžeme nasledujúci program zapísať do samostatného súboru, povedzme new_file.cpp.
#include 'Namespace_second.h' void test () {using namespace Second // creating object of class First_class First_class obj2}
Preto , direktíva using výrazne uľahčuje používanie priestoru mien v C ++, kdekoľvek chcete.
Vyhlásenie o použití
V deklarácii using importujeme po jednom konkrétnom názve, ktorý je k dispozícii iba v rámci aktuálneho rozsahu a volá sa pomocou rozlíšenia rozsahu. POZNÁMKA: Názov importovaný pomocou deklarácie using môže prepísať názov importovaný pomocou direktívy. Môžeme to vidieť na príklade nižšie.
Uvažujme o hlavičkovom súbore New_File.h:
namespace First {void A () {cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }
Teraz vytvorme nový programový súbor s názvom New_file_2.cpp s nasledujúcim kódom:
#include 'New_file.h' void B () {using namespace First // using directive using Second :: A // using declaration First :: A () // class A () of First namespace A () // calls A () druhého menného priestoru}
Operátor riešenia rozsahu (: :)
Môžeme výslovne určiť akýkoľvek názov deklarovaný v priestore názvov pomocou názvu priestoru názvov a rozlíšenia rozsahu. “ :: ' operátor s identifikátorom.
rozdiel medzi hash mapou a hash tabuľkou
namespace New_space {class X {static int i public: void func ()} // deklarácia názvu triedy class Y} // Inicializácia premennej statickej triedy 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 }
Nespojitý menný priestor v C ++
Ako vieme, menný priestor v C ++ môže byť definovaný v niekoľkých častiach, takže je tvorený súčtom jeho samostatne definovaných častí. Takže ak jedna časť menného priestoru vyžaduje názov definovaný v inom súbore, tento názov musí byť stále deklarovaný v jeho rozsahu. Zápis nasledujúceho priestoru mien nasledujúcim spôsobom buď definuje nový priestor mien, alebo pridá nové prvky k existujúcemu:
namespace namespace_name {// code body}
Vnorený menný priestor v C ++
Menné priestory je možné ľahko vnoriť a jeden menný priestor môžeme definovať vo vnútri iného menného priestoru nasledovne:
namespace namespace_name1 {// telo kódu namespace_name1 namespace namespace_name2 {// telo kódu vnorené namamespace_name2}}
Týmto sa dostávame na koniec článku Namespace in C ++. Dúfam, že ste získali predstavu o tom, čo presne je to menný priestor v C ++ a aké sú rôzne spôsoby jeho definovania. Ak sa chcete dozvedieť viac, pozrite si Edureka, dôveryhodná online vzdelávacia spoločnosť. Výcvikový a certifikačný kurz Edureka Java J2EE a SOA je navrhnutý tak, aby vás vyškolil pre základné aj pokročilé koncepty Java spolu s rôznymi rámcami Java, ako je Hibernate & Spring.
Máte na nás otázku? Uveďte to prosím v sekcii komentárov tohto blogu a my sa vám ozveme čo najskôr.