Przestrzeń nazw w C ++ służy do organizowania kodu w logiczne grupy i zapobiegania kolizjom nazw, które mogą wystąpić, zwłaszcza gdy baza kodu zawiera wiele bibliotek. W tym artykule zostaną omówione następujące wskaźniki:
- Potrzeba Namespace
- Definiowanie przestrzeni nazw w C ++
- Punkty do zapamiętania podczas definiowania przestrzeni nazw
- Korzystanie z przestrzeni nazw w C ++
- Nieciągłe przestrzenie nazw
- Zagnieżdżone przestrzenie nazw
Potrzeba Namespace
Rozważmy sytuację, piszemy kod, który ma funkcję o nazwie abc () i jest dostępna inna predefiniowana biblioteka, która również ma tę samą funkcję abc (). Teraz w momencie kompilacji kompilator nie ma pojęcia, do której wersji funkcji abc () odnosimy się w naszym kodzie.
Aby przezwyciężyć tę trudność, zaprojektowano przestrzeń nazw i jest ona wykorzystywana jako dodatkowe informacje do rozróżniania podobnych funkcji, zmiennych, klas itp. O tej samej nazwie dostępnej w różnych bibliotekach. Korzystając z przestrzeni nazw, możemy zdefiniować kontekst, w którym zdefiniowane są nazwy. W istocie przestrzeń nazw definiuje zakres.
Wszystkie standardowe typy i funkcje bibliotek C ++ są zadeklarowane w standardowej przestrzeni nazw lub przestrzeni nazw zagnieżdżonych w std, dlatego jest szeroko stosowana w większości programów.
Definiowanie przestrzeni nazw
Aby zdefiniować przestrzeń nazw, zaczynamy od słowa kluczowego namespace, po którym następuje nazwa przestrzeni nazw w następujący sposób:
przestrzeń nazw namespace_name {int a, b // deklaracje kodu gdzie // a i b są zadeklarowane w // namespace_name's scope}
Punkty do zapamiętania podczas definiowania przestrzeni nazw
- Deklaracje przestrzeni nazw pojawiają się tylko w zakresie globalnym.
- Deklaracje przestrzeni nazw nie mają specyfikatorów dostępu.
- Deklaracje przestrzeni nazw mogą być zagnieżdżane w innej przestrzeni nazw.
- W definicji przestrzeni nazw nie trzeba podawać średnika po nawiasie zamykającym.
- Definicję przestrzeni nazw można podzielić na kilka jednostek.
#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 }
Wynik:
W powyższym przykładzie, aby dwukrotnie zdefiniować funkcję func (), używamy pojęcia przestrzeni nazw. Pierwszą funkcję definiujemy w obszarze nazw first_function idruga funkcja w przestrzeni nazw second_function. Aby wywołać te funkcje, używamy operatora rozpoznawania zasięgu w następujący sposób - first_function :: func () i second_function :: func ().
Korzystanie z przestrzeni nazw w C ++
Istnieją trzy sposoby używania przestrzeni nazw w programie:
- Dyrektywa using
- Deklaracja użycia
- Operator rozpoznawania zakresu (: :)
Dyrektywa using
Możemy uniknąć poprzedzania przestrzeni nazw rozszerzeniem za pomocą namespace dyrektywy. za pomocą słowo kluczowe pozwala nam zaimportować do programu całą przestrzeń nazw o zasięgu globalnym. Można go użyć do zaimportowania przestrzeni nazw do innej przestrzeni nazw lub dowolnego programu zgodnie z naszymi wymaganiami.
Kod serii Fibonacciego w Javie
Rozważmy plik nagłówkowy Namespace_first.h:
przestrzeń nazw First {int a class First_class {int i}}
Dołączanie powyższego pliku nagłówkowego przestrzeni nazw do pliku Namespace_second.h: dołącz „Namespace_first.h”
pivot i unpivot na serwerze sql
przestrzeń nazw Second {using namespace First First_class obj int y}
Importujemy namespace_First do namespace_Second, stąd klasa First_class będzie teraz dostępna w namespace_Second. Dlatego możemy napisać następujący program w osobnym pliku, powiedzmy nowy_plik.cpp.
#include 'Namespace_second.h' void test () {using namespace Second // tworzenie obiektu klasy First_class First_class obj2}
W związku z tym , dyrektywa using znacznie ułatwia używanie przestrzeni nazw w C ++, gdziekolwiek chcesz.
Deklaracja użycia
W deklaracji using importujemy na raz jedną konkretną nazwę, która jest dostępna tylko w bieżącym zakresie i jest wywoływana za pomocą rozpoznawania zakresu. UWAGA: Nazwa zaimportowana z deklaracją using może zastąpić nazwę zaimportowaną z dyrektywą using. Widzimy to na poniższym przykładzie.
Rozważmy plik nagłówkowy New_File.h:
przestrzeń nazw First {void A () {cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }
Teraz stwórzmy nowy plik programu o nazwie New_file_2.cpp z poniższym kodem:
#include 'New_file.h' void B () {using namespace First // using dyrektywy using Second :: A // używając deklaracji First :: A () // class A () z First namespace A () // wywołuje A () drugiej przestrzeni nazw}
Operator rozpoznawania zakresu (: :)
Możemy jawnie określić dowolną nazwę zadeklarowaną w przestrzeni nazw, używając nazwy przestrzeni nazw i rozdzielczości zakresu ” :: ' operator z identyfikatorem.
przestrzeń nazw New_space {class X {static int i public: void func ()} // deklaracja nazwy klasy class Y} // Inicjalizacja statycznej zmiennej klasy 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 }
Discontiguous Namespace in C ++
Jak wiemy, przestrzeń nazw w C ++ może być zdefiniowana w kilku częściach, a zatem składa się z sumy jej oddzielnie zdefiniowanych części. Tak więc, jeśli jedna część przestrzeni nazw wymaga nazwy zdefiniowanej w innym pliku, nazwa ta nadal musi być zadeklarowana w jej zakresie. Zapisanie następującej przestrzeni nazw w następujący sposób albo definiuje nową przestrzeń nazw, albo dodaje nowe elementy do istniejącej:
przestrzeń nazw namespace_name {// code body}
Zagnieżdżona przestrzeń nazw w C ++
Przestrzenie nazw można łatwo zagnieżdżać i możemy zdefiniować jedną przestrzeń nazw wewnątrz innej przestrzeni nazw w następujący sposób:
przestrzeń nazw namespace_name1 {// treść kodu namespace_name1 przestrzeń nazw namespace_name2 {// zagnieżdżona treść kodu namamespace_name2}}
W ten sposób dochodzimy do końca artykułu Namespace in C ++. Mam nadzieję, że masz pojęcie, czym dokładnie jest przestrzeń nazw w C ++ i jakie są różne sposoby jej definiowania. Jeśli chcesz dowiedzieć się więcej, zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online. Szkolenie i certyfikacja J2EE i SOA firmy Edureka ma na celu przeszkolenie zarówno podstawowych, jak i zaawansowanych koncepcji języka Java, a także różnych struktur Java, takich jak Hibernate i Spring.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy na tym blogu, a skontaktujemy się z Tobą tak szybko, jak to możliwe.