Przestrzeń nazw C ++

Przestrzeń nazw C ++
Przestrzeń nazw w C ++ jest uogólnionym zakresem. Jego deklaracja zaczyna się od zarezerwowanego słowa, przestrzeni nazw, a następnie nazwy wyboru programisty, a następnie bloku w aparat ortodontyczny. Blok zawiera podstawowe deklaracje i/lub definicje obiektów, funkcji i innych podmiotów C ++.

Rozważ następujące dwa oświadczenia skalarne w globalnym zakresie, w następującym programie:

#włączać
za pomocą przestrzeni nazw Std;
int varid = 5;
Float Varid = 2.3;
int main ()

powrót 0;

Próba skompilowania tego programu prowadzi do błędu kompilacji. Istnieją dwie zmienne o tej samej nazwie, różnorodne. Chociaż są to dwie różne zmienne dwóch różnych typów, int I platforma, Kompilator odrzuca dwa deklaracje, ponieważ są one o tej samej nazwie. Poniższy program rozwiązuje ten problem, deklarując zmienne o tej samej nazwie w dwóch różnych uogólnionych rozszczepieniach:

#włączać
za pomocą przestrzeni nazw Std;
Przestrzeń nazw na

int varid = 5;

Przestrzeń nazw NB

Float Varid = 2.3;

int main ()

Cout << NA::varId << '\n';
Cout << NB::varId << '\n';
powrót 0;

Wyjście jest następujące:

5
2.3

W powyższym programie znajdują się dwie przestrzenie nazw: Na, który ma definicję liczby całkowitej i NB, który ma definicję pływaka, ale o tej samej nazwie co liczba całkowita dla Na. Wreszcie, kiedy program został uruchomiony, zastosowano tę samą nazwę dla dwóch różnych zmiennych. Zauważ, że aby uzyskać dostęp do tej samej nazwy dwóch różnych zmiennych, należy użyć konkretnej nazwy przestrzeni nazw, a następnie wspólnego identyfikatora. Nazwa przestrzeni nazw i wspólny identyfikator są oddzielone przez operatora rozdzielczości zakresu, „::.„Nazwa przestrzeni nazw wyróżni obiekty.

W tym artykule obejmuje podstawową koncepcję przestrzeni nazw i jej użycie w języku programowania C ++. Aby śledzić ten artykuł, powinieneś mieć podstawową wiedzę na temat języka C ++. Powinieneś również mieć wiedzę na temat zakresu C ++, choć jest to krótko wyjaśnione w tym artykule. Aby dowiedzieć się więcej o zakresie C ++, wyszukaj frazę „Zakres w C ++” (bez cytatów) w polu wyszukiwania dowolnego Linuxhint.Strona internetowa COM i naciśnij Enter. To doprowadzi cię do artykułu, który napisał ten autor.

Treść artykułu

  • Co to jest przestrzeń nazw?
  • Korzystanie z dyrektywy
  • Zagnieżdżone przestrzeni nazw
  • Standardowa przestrzeń nazw
  • Wniosek

Co to jest przestrzeń nazw?

Region deklaracji jest największą częścią programu, w którym nazwa jednostki (zmienna) jest ważna. Ten region nazywa się zakresem. Przestrzeń nazw w C ++ jest uogólnionym zakresem, którego głównym celem jest rozwiązanie konfliktów nazwy. Przestrzeń nazw ma podstawowe deklaracje i/lub definicje podmiotów.

Globalna przestrzeń nazw i jej problem

Globalna przestrzeń nazw to globalny zakres. Rozważ następujący krótki program:

#włączać
za pomocą przestrzeni nazw Std;
int identyfikator = 55;
Float Ident = 12.17;
int main ()
powrót 0;

W powyższym programie istnieją dwie zmienne, obie nazywane identyfikator. Te zmienne są w globalnym zakresie; to znaczy są w globalnej przestrzeni nazw. Próba skompilowania tego programu nie powiedzie się z komunikatem o błędzie. Globalny zakres nie akceptuje więcej niż jednej zmiennej o tej samej nazwie, więc istnieje potrzeba niestandardowej przestrzeni nazw.

Niestandardowa przestrzeń nazw

Przestrzeń nazw nie ma tylko jednej nazwy. Zamiast tego przestrzeń nazw ma zestaw nazw, aby uniknąć konfliktu z innymi zestawami nazwisk. Aby uniknąć konfliktów niższych w kodzie, poprzedź każdą nazwę z nazwą przestrzeni nazw i :: . Poniższy program ilustruje to przy użyciu dwóch niestandardowych przestrzeń nazw:

#włączać
za pomocą przestrzeni nazw Std;
Przestrzeń nazw na

int varint = 6;
float flt;

Przestrzeń nazw NB

int varint = 7;
float flt;

int main ()

Cout << NA::varInt << '\n';
Cout << NB::varInt << '\n';
Na :: flt = 2.5;
Nb :: flt = 4.8;
Cout << NA::flt << '\n';
Cout << NB::flt << '\n';
powrót 0;

Wyjście to:

6
7
2.5
4.8

Zauważ, że nazwy Na :: flt I Nb :: flt zostały ostatecznie zdefiniowane w główny() funkcjonować. C ++ nie zezwala na taką definicję w zakresie globalnego.

Zauważ, że niestandardowa przestrzeń nazw jest zagnieżdżoną przestrzenią nazw dla globalnej przestrzeni nazw.

Korzystanie z dyrektywy

Aby uniknąć wpisywania „namePace :: Nazwa” przez cały czas zamiast „nazwy” po ogłoszeniu przestrzeni nazw, możesz użyć za pomocą dyrektywa. Składnia do użycia za pomocą Dyrektywa jest następująca:

używając nazwy przestrzeni nazw;

za pomocą Dyrektywa nie jest dyrektywą przedprocesorową, więc kończy się półkolisem (;).

Poniższy program ilustruje użycie za pomocą dyrektywa i więcej:

#włączać
za pomocą przestrzeni nazw Std;
Przestrzeń nazw NB

int varint = 7;
int func ()
zwrot varint;


int fn ()
za pomocą przestrzeni nazw NB;
int myvar2 = func ();
// Inne obiekty i funkcje z NB śledź.
powrót myvar2;

int myvar3 = nb :: func ();
int main ()
Cout << fn() << " << myVar3 << '\n';
powrót 0;

Wyjście tego programu jest 7 7. Termin "za pomocą przestrzeni nazw NB;”Został umieszczony na początku fn () definicja. func () Z przestrzeni nazw NB jest nazywany tuż poniżej, bez poprzedzania „NB ::."

Zmienna zadeklarowana w globalnym zakresie (globalna przestrzeń nazw) jest widoczna od punktu deklaracji do końca pliku. Jest to również widoczne w zagnieżdżonych przestrzeniach nazw (zagnieżdżone), takich jak zagnieżdżone fn () zakres funkcji powyżej. za pomocą Dyrektywa łączy się z jej przestrzeni nazw z pozycji, w której jest umieszcza ją na końcu zakresu, w którym jest umieszczony.

Imię func () z przestrzeni nazw NB nie można zobaczyć poniżej fn () Definicja, ponieważ „używając przestrzeni nazw NB; ” został umieszczony w zakresie funkcji (blok). Pod tym warunkiem, aby użyć „func ()„Poza blokiem przestrzeni nazw NB (zakres) musi być poprzedzony„NB ::,”Jak w poniższym stwierdzeniu:

int myvar3 = nb :: func ();

za pomocą Dyrektywa dołącza do jej przestrzeni nazw z zewnętrzną przestrzenią nazwy gniazdowania z pozycji, w której jest umieszczona na końcu zewnętrznej przestrzeni nazw gniazdej. W poniższym programie przestrzeń nazw NA jest połączona z globalną przestrzenią nazw. Obie przestrzenie nazw rozciągają się na fn () Definicja funkcji, przestrzeń nazw, w której są one połączone z przestrzenią nazw NB. Przestrzeń nazw NB kończy się na końcu fn () Definicja funkcji, a dwie poprzednie przestrzenie nazw trwają do końca pliku (odczytaj kod).

#włączać
za pomocą przestrzeni nazw Std;
Przestrzeń nazw na

int varint = 6;
int func ()
zwrot varint;


Przestrzeń nazw NB

int varint = 7;
int func ()
zwrot varint;


używając przestrzeni nazw na;
int myvar0 = varint;
// Inne obiekty i funkcje od :: i NB śledź.
int fn ()
int myvar1 = varint;
za pomocą przestrzeni nazw NB;
int myvar2 = nb :: func ();
// Inne obiekty i funkcje z NB następują do końca tego zakresu.
powrót myvar1 + myvar2;

// tylko obiekty i funkcje od :: i NB śledź.
int myvar3 = nb :: func ();
int main ()
Cout << myVar0 << " <<
fn () << " << myVar3 <<
'\N';
powrót 0;

Wyjście jest 6, 13, 7.

Notatka: Globalna przestrzeń nazw jest wskazana :: , co oznacza, że ​​przed operatorem rozdzielczości zakresu nie ma nic.

Poniżej stwierdzenia „używając przestrzeni nazw na;„Zmienne z przestrzeni nazw globalnych i NA może być używane bez wskazania ich źródłowego przestrzeni nazw. Następne oświadczenie używa varint przestrzeni nazw NA. Globalny i łączny region przestrzeni nazw rozciąga się na fn () Przestrzeń nazw funkcji. Więc varint pierwszego stwierdzenia w fn () zakres funkcji jest z przestrzeni nazw NA.

Ponieważ region dla globalnych i NA NAZWA rozciąga się na całe fn () Zakres, po „int myvar2 = nb :: func ();,„Każda nazwa z przestrzeni nazw NB może być używana tylko w fn () zakres bez poprzedzania go „NB ::,”Tylko wtedy, gdy nie wystąpiło to w przestrzeniach nazw Na i Global (bloki). W przeciwnym razie powinno to być poprzedzone „NB ::.„Region połączonych przestrzeni nazw dla Na i Global kontynuuje poniżej fn () definicja i do główny() funkcjonować do końca pliku.

Rozszerzenie przestrzeni nazw NB zaczyna się od „int myvar2 = nb :: func ();" w fn () blok i kończy na końcu fn () Blok definicji.

Notatka: Przestrzeni nazw, których regiony są połączone, nie powinny mieć tej samej nazwy zmiennej w swoich różnych blokach przestrzeni nazw.

Regiony przestrzeni nazw

Przestrzeń nazw to zakres. Oprócz globalnej przestrzeni nazw (zakres globalnego), każda przestrzeń nazw powinna zostać zadeklarowana w bloku. Ten blok jest pierwszą częścią prawdopodobnie rozproszonych regionów przestrzeni nazw. Za pomocą dyrektywy za pomocą przestrzeni nazw można rozszerzyć jako regiony w innych zakresach.

Podmioty zadeklarowane w ciele przestrzeni nazw są uważane za członków przestrzeni nazw, a nazwy wprowadzone przez te deklaracje do deklaratywnego regionu przestrzeni nazw są nazwy członków przestrzeni nazw.

Zagnieżdżone przestrzeni nazw

Poniższy program pokazuje zagnieżdżone przestrzenie nazw:

#włączać
za pomocą przestrzeni nazw Std;
Przestrzeń nazw
int i = 1;
Przestrzeń nazw B
int i = 2;
Przestrzeń nazw C
int i = 3;



int main ()

Cout << A::i << " <<
A :: b :: i << " <<
A :: B :: C :: i << '\n';
powrót 0;

Wyjście to:

1 2 3

Zauważ, że dostępne są trzy wartości za pomocą operatora rozdzielczości zakresu.

Standardowa przestrzeń nazw

C ++ ma bibliotekę o nazwie Standard Library. Nazwy obiektów, funkcji i innych jednostek w tej bibliotece pochodzą z przestrzeni nazw zwanej standardową przestrzenią nazw Std. Standardowa biblioteka zawiera sub-librarie, a jedna z tych sub-bibliotek jest iostream. iostream Biblioteka zawiera obiekt Cout, który służy do wysyłania wyników do konsoli (terminal).

Imię Cout musi być w Std Przestrzeń nazw. Używać iostream z nim Std Przestrzeń nazw, program powinien być następujący:

#włączać
za pomocą przestrzeni nazw Std;

Zwróć uwagę na użycie za pomocą dyrektywa i Std. Termin "#włączać ”Jest dyrektywą przedprocesorową i nie kończy się półkolisem. Zawiera „plik” iostream na pozycji jej dyrektywy.

Wniosek

Przestrzeń nazw to zakres. Opis przestrzeni nazw (definicja) zawiera podstawowe deklaracje i/lub definicje obiektów, funkcji i innych jednostek C ++. Poza definicją przestrzeni nazw można uzyskać nazwę za pomocą składni, „nazwa nazwy :: Nazwa.”Oprócz globalnej przestrzeni nazw (zakres globalnego), każda przestrzeń nazw powinna zostać zadeklarowana w bloku. Ten blok jest pierwszą częścią prawdopodobnie rozproszonych regionów przestrzeni nazw. Z za pomocą Dyrektywa, przestrzeń nazw można rozszerzyć jako regiony w innych rozszczepieniach. Przestrzeni nazw, których regiony są połączone, nie powinny mieć tej samej nazwy zmiennej w swoich różnych blokach przestrzeni nazw.