namespaces c
Kompletní přehled jmenných prostorů v C ++ s jednoduchými příklady.
V našich předchozích výukových programech jsme zatím viděli vše o proměnných, deklaracích, funkcích a dalších podobných entitách používaných v C ++.
Při vývoji aplikací v C ++ mohou vzniknout zvláštní situace, jako jsou použití stejných názvů proměnných dvakrát nebo funkce definované se stejnými prototypy atd. Když tyto scénáře vzniknou, je pro kompilátor obtížné odvodit správné volání proměnné nebo funkce, které vede k nejednoznačnosti .
=> Podívejte se na průvodce Perfect C ++ Training Guide zde.
Co se naučíte:
- Co je to jmenný prostor?
- Definování jmenného prostoru
- Přístup k členům oboru názvů
- Směrnice o používání
- Vnořené obory jmen
- Externí jmenné prostory
- Souvislé obory jmen
- Závěr
- Doporučené čtení
Co je to jmenný prostor?
Podívejte se na níže uvedený příklad:
#include #include int main() { int var; double var; std::cin>>var; }
Výstup:
Ve funkci „int main ()“:
8:10: chyba: konfliktní prohlášení „dvojitá var“
7: 7: poznámka: předchozí prohlášení jako „int var“
Ve výše uvedeném příkladu jsme definovali dvě proměnné s různými typy, ale se stejným identifikátorem. Když tedy kompilujeme tento příklad, dostaneme chybu, jak je znázorněno v okně Výstup. Tyto konfliktní deklarace vznikají z důvodu stejného identifikátoru, který se používá k pojmenování dvou proměnných.
Tento typ situací vede k nejednoznačnosti v aplikacích.
C ++ zavádí něco s názvem „ jmenné prostory “K vyřešení tohoto problému. Obor názvů v C ++ je jako balíček nebo oblast nebo knihovna, která se používá k rozlišení mezi proměnnou nebo funkcemi se stejnými identifikátory.
Obor názvů může obsahovat proměnné, funkce, třídy nebo jiné objekty a dokonce i jiný obor názvů. Na každého člena oboru názvů lze odkazovat pomocí prostoru oboru názvů. To pomáhá kompilátoru rozlišovat mezi různými programovacími entitami, i když mají stejné názvy.
Definování jmenného prostoru
V C ++ můžeme definovat jmenný prostor pomocí klíčového slova „ jmenný prostor ' Jak je ukázáno níže:
namespace namespace_name{ namespace_declarations; }
Pokud tedy potřebujeme definovat jmenný prostor s názvem „test_space“, můžeme to udělat takto:
namespace test_space{ int var=10; }
Výše uvedená deklarace definuje jmenný prostor s názvem „test_space“. Jak je znázorněno, má celočíselnou proměnnou var jako člena.
Přístup k členům oboru názvů
Nyní jsme definovali náš vlastní jmenný prostor „test_space“ a jak se dostaneme k obsahu tohoto jmenného prostoru?
V programu C ++ můžeme přistupovat ke členům jmenného prostoru pomocí syntaxe:
namespace_name::namespace_member;
K celočíselné proměnné var deklarované ve jmenném prostoru „test_space“ výše lze přistupovat takto:
test_space::var;
V níže uvedeném úplném příkladu předvedete jmenné prostory a jejich použití.
co je testování integrace s příkladem
#include #include namespace test_space{ int var = 10; } int main() { double var = 20.53; std::cout<<'local var = '< Výstup:
místní var = 20,53
test_space :: var = 10
Ve výše uvedeném příkladu programování jsme demonstrovali vše o vytváření a přístupu k oboru názvů. Jak vidíme, „test_space“ je obor názvů, který jsme definovali. Má v sobě definovanou jedinou celočíselnou proměnnou var. Pak v hlavní funkci máme další inicializovanou dvojitou proměnnou var.
Později zobrazíme obě tyto proměnné. Všimněte si, že zatímco lokální dvojitou proměnnou uvnitř hlavní lze vytisknout přímo, pro tisk proměnné oboru názvů musíme předcházet název oboru názvů.
To se také postaralo o problém střetů mezi proměnnými kvůli stejným jménům, o kterých jsme hovořili dříve.
Směrnice o používání
V našem předchozím tématu jsme viděli, že můžeme přistupovat k členům oboru názvů pomocí namespace_name :: namespace_member.
Pokud nechceme specifikovat název oboru názvů všude v programu, můžeme použít „ použitím ”Směrnice pro zahrnutí jmenného prostoru do programu.
To se děje následovně:
#include #include namespace test_space{ int var = 10; } using namespace std; using namespace test_space; int main() { double var = 20.53; cout<<'local var = '< Výstup:
místní var = 20,53
test_space :: var = 10
Ve výše uvedeném příkladu jsme po definování oboru názvů „test_space“ použili dva příkazy.
Tyto jsou:
using namespace std; using namespace test_space;
První příkaz používá deklaraci pro přístup k jmennému prostoru „std“, což je předdefinovaný standardní jmenný prostor v knihovně C ++. Tento jmenný prostor se používá pro přístup k různým funkcím, jako je cin, cout atd.
Druhý příkaz se používá k zahrnutí jmenného prostoru “test_space” do programu.
V hlavní funkci vidíme, že funkcím jako cout a variable var nemusí předcházet název oboru názvů. Můžeme se na ně přímo odvolat. Ale protože var má v hlavní funkci střet s názvem s místní proměnnou, odkazujeme na něj pomocí operátoru rozlišení oboru (: :), protože obory názvů také vždy mají globální rozsah.
Vnořené obory jmen
C ++ také umožňuje mít vnořené jmenné prostory, tj. Jmenný prostor definovaný uvnitř jiného jmenného prostoru.
Obecná syntaxe vnořených jmenných prostorů je následující:
namespace ns1{ ns1_code; namespace ns2{ ns2_code; } }
Pokud potřebujeme přístup k ns2_code, můžeme k němu přistupovat následovně:
ns1::ns2::ns2_code;
Ukážeme vnořené jmenné prostory pomocí následujícího příkladu kódu.
#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 = '< Výstup:
místní var = 20,53
první :: var = 10
druhý :: var = 20
Ve výše uvedeném programu jsme použili vnořené jmenné prostory. Vezměte prosím na vědomí způsob, jakým se používá direktiva pro přístup k jmenným prostorům. Nestačí odkazovat pouze na nejvnitřnější jmenný prostor jednou. Pokud potřebujeme kód z nejvzdálenějšího jmenného prostoru, musíme ho odkázat zvlášť.
Můžeme použít jiný název pro jmenné prostory známé jako „alias“. To je zvláště užitečné při používání vnořených jmenných prostorů a stupeň vnoření je vysoký.
Alias pro jmenný prostor můžeme demonstrovat úpravou výše uvedeného příkladu.
#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 = '< Výstup:
místní var = 20,53
jaký je nejlepší stahovač videa
první :: var = 10
druhý :: var = 20
Všimněte si vnořeného aliasu, který je definován pro jmenný prostor first :: second. Jakmile je alias definován, můžeme odkazovat na jmenný prostor pomocí aliasu.
Externí jmenné prostory
Někdy, když máme v naší aplikaci příliš mnoho jmenných prostorů, které bychom mohli použít, možná bychom chtěli umístit všechny jmenné prostory do samostatného souboru. To lze snadno provést. Pokud jsou jmenné prostory v samostatném souboru, zahrneme tento soubor pouze do našeho programu a poté přímo použijeme jmenné prostory a jejich obsah v našem programu.
Například, pokud máme soubor s názvem ns.h, který obsahuje následující jmenný prostor.
//ns.h namespace first{ int var = 25; }
Nyní v našem programu můžeme použít jmenný prostor „first“ následovně:
#include #include “ns.h” using namespace std; int main() { cout<Takže jakmile do našeho programu zahrneme soubor obsahující jmenné prostory, můžeme použít jmenné prostory, jako kdyby byly globálně deklarovány ve stejném programu.
Souvislé obory jmen
C ++ nám také umožňuje definovat něco, co se nazývá souvislé jmenné prostory. Souvislé jmenné prostory jsou jmenné prostory, které jsou definovány více než jednou tím, že mají stejný název. Ve skutečnosti to nejsou oddělené jmenné prostory, ale rozšíření stejného jmenného prostoru.
V následujícím příkladu jsou patrné souvislé jmenné prostory.
#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 = '< Výstup:
místní var = 20,53
první :: var = 10
druhý :: var = 20
Ve výše uvedeném příkladu si všimněte, že jsme stejný prostor jmen definovali dvakrát. V první definici máme proměnnou s názvem var. Zatímco ve druhé deklaraci máme definovaný jiný jmenný prostor.
V hlavní funkci jsme přistupovali k členům vnějšího i vnitřního prostoru jmen a všimněte si, že ke členům je snadný přístup.
Toto je příklad souvislých jmenných prostorů, které jsou někdy známé také jako „nesouvislé jmenné prostory“. Jejich definice se objevují odděleně, ale ve skutečnosti se jedná o spojité jmenné prostory.
Závěr
S tímto jsme se dostali na konec tohoto tutoriálu o jmenných prostorech v C ++. Jmenné prostory jedním způsobem, který nám umožňuje oddělit náš kód v různých prostorech nebo oblastech, abychom měli jasnost při jeho čtení a také při používání jeho členů.
V našich dalších výukách se dozvíme více o různých základních tématech C ++, jako je zpracování výjimek, vstup / výstup souborů atd.
=> Podívejte se sem a podívejte se zde na A-Z výukových kurzů C ++.
Doporučené čtení
- Nejlepší ZDARMA C # Tutorial Series: The Ultimate C # Guide For Beginners
- Testování zátěže s výukovými programy HP LoadRunner
- Funkce knihovny v C ++
- 70+ NEJLEPŠÍCH C ++ návodů, jak se naučit programování v C ++ ZDARMA
- Objektově orientované programování v C ++
- Seznamy inicializátoru v C ++
- Iterátory v STL
- Zapouzdření v C ++