Wprowadziliśmy przestrzenie nazw w poniższym zestawie 1.
Przestrzeń nazw w C++ | Zestaw 1 (Wprowadzenie)
Definiowanie przestrzeni nazw:
Definicja przestrzeni nazw zaczyna się od słowa kluczowego namespace, po którym następuje nazwa przestrzeni nazw w następujący sposób:
przestrzeń nazw nazwa_przestrzeni nazw
{
// deklaracje kodu, tj. zmienna (int a;)
metoda (void add();)
zajęcia (uczeń klasy{};)
}
Należy zauważyć, że po nawiasie zamykającym nie ma średnika (;).
Aby wywołać wersję funkcji lub zmiennej z włączoną przestrzenią nazw, dodaj nazwę przestrzeni nazw na początku w następujący sposób:
nazwa_przestrzeni nazw: :kod; // kod może być zmienną funkcją lub klasą.
Dyrektywa using:
Można także uniknąć dodawania przestrzeni nazw za pomocą dyrektywy using namespace. Ta dyrektywa informuje kompilator, że kolejny kod wykorzystuje nazwy z określonej przestrzeni nazw.
Przestrzeń nazw jest zatem implikowana dla następującego kodu:
#include using namespace std; // first name space namespace first_space { void func() { cout << 'Inside first_space' << endl; } } // second name space namespace second_space { void func() { cout << 'Inside second_space' << endl; } } using namespace first_space; int main () { // This calls function from first name space. func(); return 0; }
Nazwy wprowadzone w dyrektywie using podlegają normalnym zasadom zakresu. Nazwa widoczna jest od miejsca dyrektywy using aż do końca zakresu, w którym dyrektywa się znajduje. Jednostki o tej samej nazwie zdefiniowane w zakresie zewnętrznym są ukryte.
Zagnieżdżone przestrzenie nazw:
Przestrzenie nazw można zagnieżdżać, umożliwiając zdefiniowanie jednej przestrzeni nazw w innej przestrzeni nazw w następujący sposób:
SYNTAX: namespace namespace_name1 { // code declarations namespace namespace_name2 { // code declarations } } Dostęp do członków zagnieżdżonej przestrzeni nazw można uzyskać za pomocą operatorów rozpoznawania w następujący sposób:
// aby uzyskać dostęp do członków przestrzeni nazw2
używając przestrzeni nazw nazwa_przestrzeni_nazw1::nazwa_przestrzeni_nazw2;
// aby uzyskać dostęp do członków przestrzeni nazw:nazwa1
używając przestrzeni nazw nazwa_przestrzeni_nazw1;
W powyższych instrukcjach, jeśli używasz nazwy przestrzeni nazw1, elementy przestrzeni nazw2 będą dostępne w następującym zakresie:
#include using namespace std; // first name space namespace first_space { void func() { cout << 'Inside first_space' << endl; } // second name space namespace second_space { void func() { cout << 'Inside second_space' << endl; } } } using namespace first_space::second_space; int main () { // This calls function from second name space. func(); return 0; }
Możliwe jest także utworzenie więcej niż jednej przestrzeni nazw w przestrzeni globalnej. Można to zrobić na dwa sposoby.
-
Wyjście:
-
Wyjście:
- Można ich bezpośrednio używać w tym samym programie i służą do deklarowania unikalnych identyfikatorów.
- W nienazwanych przestrzeniach nazw nazwa przestrzeni nazw nie jest wymieniona w deklaracji przestrzeni nazw.
- Nazwa przestrzeni nazw jest generowana jednoznacznie przez kompilator.
- Utworzone przez Ciebie nienazwane przestrzenie nazw będą dostępne tylko w pliku, w którym je utworzyłeś.
- Nienazwane przestrzenie nazw zastępują statyczną deklarację zmiennych.
CPP
// A C++ program to show more than one namespaces // with different names. #include using namespace std; // first name space namespace first { int func() { return 5; } } // second name space namespace second { int func() { return 10; } } int main() { // member function of namespace // accessed using scope resolution operator cout << first::func() <<"n"; cout << second::func() <<"n"; return 0; }
5 10
Możliwe jest również utworzenie dwóch bloków przestrzeni nazw o tej samej nazwie. Drugi blok przestrzeni nazw jest niczym innym jak kontynuacją pierwszej przestrzeni nazw. W prostszych słowach możemy powiedzieć, że obie przestrzenie nazw nie są różne, ale w rzeczywistości takie same, które są definiowane w częściach.
CPP
// C++ program to demonstrate namespace extension #include using namespace std; // first name space namespace first { int val1 = 500; } // rest part of the first namespace namespace first { int val2 = 501; } int main() { cout << first::val1 <<"n"; cout << first::val2 <<"n"; return 0; }
500 501
Nienazwane przestrzenie nazw
// C++ program to demonstrate working of unnamed // namespaces #include using namespace std; // unnamed namespace declaration namespace { int rel = 300; } int main() { cout << rel << "n"; // prints 300 return 0; }
Wyjście:
300