Wszystko, co musisz wiedzieć o przestrzeni nazw w C ++



W tym artykule znajdziesz szczegółową i wszechstronną wiedzę na temat przestrzeni nazw w języku C ++. Ma różne typy i zastosowania w każdym programie.

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

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.





Przestrzeń nazw w C ++

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:

  1. Dyrektywa using
  2. Deklaracja użycia
  3. 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.