Tot ce trebuie să știți despre spațiul de nume în C ++



Acest articol vă va oferi o cunoaștere detaliată și cuprinzătoare a spațiului de nume în C ++. Sunt diferite tipuri și utilizări în orice program.

Spațiul de nume în C ++ este utilizat pentru a organiza codul în grupuri logice și pentru a preveni coliziunile de nume care pot apărea mai ales atunci când baza de cod include mai multe biblioteci. În acest articol vor fi acoperite următoarele indicații:

transformare XML în informatica cu exemplu

Nevoia de spațiu de nume

Luați în considerare o situație, scriem un cod care are o funcție numită abc () și există o altă bibliotecă predefinită disponibilă care are, de asemenea, aceeași funcție abc (). Acum, în momentul compilării, compilatorul nu are nicio idee despre versiunea funcției abc () la care ne referim în codul nostru.





Spațiu de nume în c ++

Pentru a depăși această dificultate, spațiul de nume este conceput și este utilizat ca informații suplimentare pentru a diferenția funcții similare, variabile, clase etc. cu același nume disponibil în diferite biblioteci. Folosind spațiul de nume, putem defini contextul în care sunt definite numele. În esență, un spațiu de nume definește un domeniu de aplicare.



Toate tipurile și funcțiile standard de bibliotecă C ++ sunt declarate în spațiul de nume std sau spațiile de nume imbricate în std, astfel este utilizat pe scară largă în majoritatea programelor.

Definirea unui spațiu de nume

Pentru a defini spațiul de nume, începem cu spațiul de nume al cuvântului cheie urmat de numele spațiului de nume după cum urmează:

namespace namespace_name {int a, b // cod declarații unde // a și b sunt declarate în // namespace_name's scope}

Puncte de reținut la definirea unui spațiu de nume

  • Declarațiile spațiului de nume apar numai la nivel global.
  • Declarațiile spațiului de nume nu au specificatori de acces.
  • Declarațiile spațiului de nume pot fi imbricate într-un alt spațiu de nume.
  • Nu este nevoie să dați punct și virgulă după acoladul de închidere al definiției spațiului de nume.
  • Definiția spațiului de nume poate fi împărțit pe mai multe unități.
#include folosind 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 }

Ieșire:



În exemplul de mai sus pentru a defini funcția func () de două ori diferite, folosim conceptul de spațiu de nume. Definim prima funcție sub spațiul de nume first_function șia doua funcție sub spațiul de nume a doua funcție. Pentru a apela aceste funcții folosim operatorul de rezoluție a scopului în modul următor - first_function :: func () și second_function :: func ().

Utilizarea spațiului de nume în C ++

Există trei moduri de a utiliza un spațiu de nume în program,

  1. Directiva de utilizare
  2. Declarația de utilizare
  3. Operator rezoluție domeniu (: :)

Directiva de utilizare

Putem evita prelungirea spațiilor de nume cu folosind directivă spațiu de nume. folosind cuvânt cheie ne permite să importăm un întreg spațiu de nume în programul dvs. cu un domeniu global. Poate fi folosit pentru a importa un spațiu de nume într-un alt spațiu de nume sau în orice program conform cerințelor noastre.

Luați în considerare un fișier antet namespace_first.h:

spațiu de nume First {int a class First_class {int i}}

Inclusiv fișierul de antet al spațiului de nume de mai sus în fișierul namespace_second.h: includeți „namespace_first.h”

namespace Second {folosind namespace First First_class obj int y}

Importăm namespace_First în namespace_Second, prin urmare clasa First_class va fi acum disponibilă în namespace_Second. Prin urmare, putem scrie următorul program într-un fișier separat, să spunem new_file.cpp.

#include 'Namespace_second.h' void test () {folosind namespace Second // crearea obiectului clasei First_class First_class obj2}

Prin urmare , directiva de utilizare face mult mai ușoară utilizarea unui spațiu de nume în C ++, oriunde doriți.

Declarația de utilizare

În declarația de utilizare, importăm un nume specific la un moment dat, care este disponibil doar în interiorul domeniului de aplicare curent și este apelat cu ajutorul rezoluției domeniului. NOTĂ: Numele importat cu folosirea-declarație poate suprascrie numele importat cu utilizarea directivei. Putem vedea acest lucru în exemplul de mai jos.

Să luăm în considerare un fișier antet New_File.h:

spațiu de nume În primul rând {void A () {cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }

Acum să creăm un nou fișier de program cu numele New_file_2.cpp cu codul de mai jos:

#include 'New_file.h' void B () {folosind namespace First // folosind directiva folosind Second :: A // folosind declarația First :: A () // clasa A () din First namespace A () // apelează A () din al doilea spațiu de nume}

Operator rezoluție domeniu (: :)

Putem specifica în mod explicit orice nume declarat într-un spațiu de nume folosind numele spațiului de nume și rezoluția domeniului „ :: ' operator cu identificatorul.

namespace New_space {class X {static int i public: void func ()} // class name statement class Y} // Initializing static class variable 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 }

Spațiu de nume necontenit în C ++

După cum știm, un spațiu de nume în C ++ poate fi definit în mai multe părți, astfel că este alcătuit din suma părților sale definite separat. Deci, dacă o parte a spațiului de nume necesită un nume definit într-un alt fișier, acel nume trebuie totuși declarat în domeniul său de aplicare. Scrierea următorului spațiu de nume în modul următor fie definește un spațiu de nume nou, fie adaugă elemente noi la unul existent:

namespace namespace_name {// body body}

Spațiu de nume imbricat în C ++

Spațiile de nume pot fi cuibărite cu ușurință și putem defini un spațiu de nume în interiorul altui spațiu de nume după cum urmează:

namespace namespace_name1 {// corpul codului namespace_name1 namespace namespace_name2 {// body body imbricat nume namespace_name2}}

Cu aceasta, ajungem la sfârșitul articolului Spațiul de nume în C ++. Sper că v-ați făcut o idee despre ce este exact un spațiu de nume în C ++ și care sunt diferitele moduri de definire a acestuia. Dacă doriți să aflați mai multe, consultați de Edureka, o companie de învățare online de încredere. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate Java, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog și vă vom răspunde cât mai curând posibil.