Vše, co potřebujete vědět o oboru názvů v C ++



Tento článek vám poskytne podrobné a komplexní znalosti oboru Namespace v C ++. Jedná se o různé typy a použití v jakémkoli programu.

Obor názvů v C ++ se používá k uspořádání kódu do logických skupin ak zabránění kolizím názvů, ke kterým může dojít zejména v případě, že vaše databáze obsahuje více knihoven. V tomto článku budou zahrnuty následující ukazatele:

Potřeba jmenného prostoru

Zvažte situaci, píšeme nějaký kód, který má funkci nazvanou abc () a je k dispozici další předdefinovaná knihovna, která má také stejnou funkci abc (). Nyní v době kompilace kompilátor nemá ponětí, na jakou verzi funkce abc () v našem kódu odkazujeme.





Obor názvů v jazyce C ++

K překonání této obtížnosti je navržen jmenný prostor, který se používá jako další informace k rozlišení podobných funkcí, proměnných, tříd atd. Se stejným názvem dostupným v různých knihovnách. Pomocí oboru názvů můžeme definovat kontext, ve kterém jsou názvy definovány. V podstatě jmenný prostor definuje obor.



Všechny standardní typy a funkce knihoven v C ++ jsou deklarovány ve jmenném prostoru std nebo jmenných prostorech vnořených uvnitř std, takže je široce používán ve většině programů.

co je pojo třída v Javě s příkladem

Definování jmenného prostoru

Chcete-li definovat jmenný prostor, začneme s jmenným prostorem klíčových slov následovaným názvem jmenného prostoru následovně:

jmenný prostor namespace_name {int a, b // deklarace kódu, kde // a a b jsou deklarovány v // oboru jmenného prostoru}

Body, které si musíte pamatovat při definování jmenného prostoru

  • Deklarace oboru názvů se objevují pouze v globálním rozsahu.
  • Deklarace oboru názvů nemají specifikátory přístupu.
  • Deklarace jmenného prostoru mohou být vnořeny do jiného jmenného prostoru.
  • Není třeba dávat středník za závorku definice oboru názvů.
  • Definici oboru názvů lze rozdělit na několik jednotek.
#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ýstup:



Ve výše uvedeném příkladu k definování funkce func () dvakrát odlišně používáme koncept jmenného prostoru. První funkci definujeme pod jmenným prostorem first_function adruhá funkce v oboru názvů second_function. K volání těchto funkcí používáme operátor rozlišení oboru následujícím způsobem - first_function :: func () a second_function :: func ().

Používání jmenného prostoru v C ++

Existují tři způsoby, jak použít jmenný prostor v programu,

  1. Směrnice o používání
  2. Deklarace použití
  3. Provozovatel řešení rozsahu (: :)

Směrnice o používání

Můžeme se vyhnout předpřipravování jmenných prostorů pomocí použitím směrnice o jmenném prostoru. použitím klíčové slovo nám umožňuje importovat celý jmenný prostor do vašeho programu s globálním rozsahem. Může být použit k importu jmenného prostoru do jiného jmenného prostoru nebo do libovolného programu podle našich požadavků.

Zvažte soubor záhlaví Namespace_first.h:

namespace First {int a class First_class {int i}}

Zahrnutí výše uvedeného souboru záhlaví oboru názvů do souboru Namespace_second.h: zahrnout „Namespace_first.h“

namespace Second {using namespace First First_class obj int y}

Importujeme namespace_First do namespace_Second, proto bude třída First_class nyní k dispozici v namespace_Second. Následující program tedy můžeme napsat do samostatného souboru, řekněme new_file.cpp.

#include 'Namespace_second.h' void test () {using namespace Second // creating object of class First_class First_class obj2}

Proto , direktiva using značně usnadňuje používání oboru názvů v C ++, kdekoli chcete.

Deklarace použití

V deklaraci using importujeme vždy jeden konkrétní název, který je k dispozici pouze uvnitř aktuálního oboru a je volán pomocí rozlišení oboru. POZNÁMKA: Název importovaný pomocí using-declaration může přepsat název importovaný pomocí using směrnice. Vidíme to na níže uvedeném příkladu.

Uvažujme o hlavičkovém souboru New_File.h:

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

Nyní vytvořme nový programový soubor s názvem New_file_2.cpp s níže uvedeným kódem:

#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 jmenného prostoru}

Operátor rozlišení oboru (: :)

Můžeme explicitně určit libovolný název deklarovaný v oboru názvů pomocí názvu oboru názvů a rozlišení oboru “ :: ' operátor s identifikátorem.

jak nastavit php
namespace New_space {třída X {static int i public: void func ()} // deklarace názvu třídy třída Y} // Inicializace proměnné statické třídy int New_space :: X :: i = 23 třída New_space :: Y {int a public: int getdata () {cout<< a } // Constructor declaration Y() } // Constructor definition explicitly New_space::Y::Y() { a=0 }

Diskontiguous Namespace in C ++

Jak víme, jmenný prostor v C ++ lze definovat v několika částech, takže je tvořen součtem jeho samostatně definovaných částí. Takže pokud jedna část oboru názvů vyžaduje název definovaný v jiném souboru, musí být tento název stále deklarován v jeho oboru. Zápis následujícího jmenného prostoru následujícím způsobem buď definuje nový jmenný prostor, nebo přidá nové prvky do existujícího:

jmenný prostor namespace_name {// tělo kódu}

Vnořený jmenný prostor v C ++

Obory názvů lze snadno vnořit a my můžeme definovat jeden jmenný prostor uvnitř jiného jmenného prostoru následujícím způsobem:

jmenný prostor namespace_name1 {// tělo kódu namespace_name1 namespace namespace_name2 {// tělo kódu vnořené namamespace_name2}}

S tímto se dostáváme na konec oboru názvů v článku C ++. Doufám, že máte představu o tom, co přesně je jmenný prostor v C ++ a jaké jsou různé způsoby jeho definice. Pokud se chcete dozvědět více, podívejte se na Edureka, důvěryhodná online vzdělávací společnost. Školicí a certifikační kurz Edureka Java J2EE a SOA je navržen tak, aby vás vyškolil jak pro základní, tak pro pokročilé koncepty Java spolu s různými rámci Java jako Hibernate & Spring.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů tohoto blogu a my se vám ozveme co nejdříve.