Tutto ciò che devi sapere sullo spazio dei nomi in C ++



Questo articolo ti fornirà una conoscenza dettagliata e completa dello spazio dei nomi in C ++. È di vari tipi e usi in qualsiasi programma.

Lo spazio dei nomi in C ++ viene utilizzato per organizzare il codice in gruppi logici e per evitare conflitti di nomi che possono verificarsi soprattutto quando la base del codice include più librerie. In questo articolo verranno trattati i seguenti puntatori:

La necessità di Namespace

Considera una situazione, stiamo scrivendo del codice che ha una funzione chiamata abc () e c'è un'altra libreria predefinita disponibile che ha anche la stessa funzione abc (). Al momento della compilazione, il compilatore non ha idea di quale versione della funzione abc () ci riferiamo all'interno del nostro codice.





Spazio dei nomi in c ++

Per superare questa difficoltà lo spazio dei nomi è progettato e viene utilizzato come informazione aggiuntiva per differenziare funzioni, variabili, classi, ecc. Simili con lo stesso nome disponibili in librerie diverse. Utilizzando lo spazio dei nomi, possiamo definire il contesto in cui vengono definiti i nomi. In sostanza, uno spazio dei nomi definisce un ambito.



Tutti i tipi e le funzioni della libreria standard C ++ sono dichiarati nello spazio dei nomi std o negli spazi dei nomi annidati all'interno di std, quindi è ampiamente utilizzato nella maggior parte dei programmi.

Definizione di uno spazio dei nomi

Per definire lo spazio dei nomi, iniziamo con la parola chiave spazio dei nomi seguito dal nome dello spazio dei nomi come segue:

namespace nome_spazio dei nomi {int a, b // dichiarazioni di codice in cui // a e b sono dichiarati // nell'ambito di // nome_spazio dei nomi}

Punti da ricordare durante la definizione di uno spazio dei nomi

  • Le dichiarazioni dello spazio dei nomi vengono visualizzate solo nell'ambito globale.
  • Le dichiarazioni dello spazio dei nomi non hanno specificatori di accesso.
  • Le dichiarazioni dello spazio dei nomi possono essere nidificate all'interno di un altro spazio dei nomi.
  • Non è necessario inserire il punto e virgola dopo la parentesi graffa di chiusura della definizione dello spazio dei nomi.
  • La definizione dello spazio dei nomi può essere suddivisa in più unità.
#include utilizzando 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 }

Produzione:



Nell'esempio sopra per definire la funzione func () due volte diverse, usiamo il concetto di spazio dei nomi. Definiamo la prima funzione sotto namespace first_function eseconda funzione nello spazio dei nomi seconda_funzione. Per chiamare queste funzioni usiamo l'operatore di risoluzione dell'ambito nel modo seguente: first_function :: func () e second_function :: func ().

Utilizzo dello spazio dei nomi in C ++

Esistono tre modi per utilizzare uno spazio dei nomi nel programma,

  1. La direttiva using
  2. La dichiarazione di utilizzo
  3. Operatore risoluzione ambito (: :)

La direttiva using

Possiamo evitare di anteporre gli spazi dei nomi con utilizzando direttiva namespace. utilizzando parola chiave ci consente di importare un intero spazio dei nomi nel tuo programma con un ambito globale. Può essere utilizzato per importare uno spazio dei nomi in un altro spazio dei nomi o in qualsiasi programma in base alle nostre esigenze.

cast double to int in java

Considera un file di intestazione Namespace_first.h:

spazio dei nomi First {int a class First_class {int i}}

Includere il file di intestazione dello spazio dei nomi sopra nel file Namespace_second.h: includere 'Namespace_first.h'

la stringa è mutabile o immutabile in java
spazio dei nomi Second {using namespace First First_class obj int y}

Importiamo il namespace_First nel namespace_Second, quindi la classe First_class sarà ora disponibile nel namespace_Second. Quindi possiamo scrivere il seguente programma in un file separato, diciamo new_file.cpp.

#include 'Namespace_second.h' void test () {using namespace Second // creazione di un oggetto della classe First_class First_class obj2}

Quindi , la direttiva using rende molto più semplice usare uno spazio dei nomi in C ++, ovunque tu voglia.

La dichiarazione di utilizzo

Nella dichiarazione using, importiamo un nome specifico alla volta che è disponibile solo all'interno dell'ambito corrente e viene chiamato con l'aiuto della risoluzione dell'ambito. NOTA: il nome importato con la dichiarazione using può sovrascrivere il nome importato con la direttiva using. Possiamo vederlo nell'esempio qui sotto.

Consideriamo un file di intestazione New_File.h:

spazio dei nomi Primo {void A () {cout<< 'A of First namespacen' } } namespace Second { void A() { cout << 'A of Second namespacen' } }

Ora creiamo un nuovo file di programma con il nome New_file_2.cpp con il codice seguente:

#include 'New_file.h' void B () {using namespace First // using Directive using Second :: A // using declaration First :: A () // class A () of First namespace A () // chiama A () del secondo spazio dei nomi}

Operatore di risoluzione dell'ambito (: :)

Possiamo specificare esplicitamente qualsiasi nome dichiarato in uno spazio dei nomi utilizzando il nome dello spazio dei nomi e la risoluzione dell'ambito ' :: ' operatore con l'identificatore.

namespace New_space {class X {static int i public: void func ()} // dichiarazione del nome della classe class Y} // Inizializzazione della variabile di classe statica 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 }

Spazio dei nomi non contiguo in C ++

Come sappiamo uno spazio dei nomi in C ++ può essere definito in più parti, quindi è costituito dalla somma delle sue parti definite separatamente. Quindi, se una parte dello spazio dei nomi richiede un nome definito in un altro file, quel nome deve comunque essere dichiarato nel suo ambito. La scrittura del seguente spazio dei nomi nel modo seguente definisce un nuovo spazio dei nomi o aggiunge nuovi elementi a uno esistente:

spazio dei nomi nome_spazio dei nomi {// corpo del codice}

Spazio dei nomi annidato in C ++

Gli spazi dei nomi possono essere annidati facilmente e possiamo definire uno spazio dei nomi all'interno di un altro spazio dei nomi come segue:

namespace namespace_name1 {// code body of namespace_name1 namespace namespace_name2 {// code body nidificato namamespace_name2}}

Con questo, arriviamo alla fine dell'articolo Namespace in C ++. Spero che tu abbia un'idea di cosa sia esattamente uno spazio dei nomi in C ++ e quali sono i diversi modi per definirlo. Se desideri saperne di più, dai un'occhiata al da Edureka, una società di apprendimento online affidabile. Il corso di formazione e certificazione Java J2EE e SOA di Edureka è progettato per formarti sia sui concetti di base che avanzati su Java insieme a vari framework Java come Hibernate e Spring.

Hai domande per noi? Per favore, menzionalo nella sezione commenti di questo blog e ti risponderemo il prima possibile.