Abbiamo introdotto gli spazi dei nomi nel set 1 di seguito.
Spazio dei nomi in C++ | Set 1 (Introduzione)
Definizione di uno spazio dei nomi:
Una definizione di spazio dei nomi inizia con la parola chiave namespace seguita dal nome dello spazio dei nomi come segue:
spazio dei nomi nome_spazio dei nomi
{
// dichiarazioni di codice, ad esempio variabile (int a;)
metodo (void add();)
classi (studente di classe{};)
}
È da notare che non c'è il punto e virgola (;) dopo la parentesi graffa di chiusura.
Per chiamare la versione abilitata allo spazio dei nomi di una funzione o di una variabile, anteporre il nome dello spazio dei nomi come segue:
nome_spazio_nome: :codice; // il codice potrebbe essere una funzione o una classe variabile.
La direttiva using:
Puoi anche evitare di anteporre gli spazi dei nomi con la direttiva using namespace. Questa direttiva indica al compilatore che il codice successivo utilizza nomi nello spazio dei nomi specificato.
Lo spazio dei nomi è quindi implicito per il seguente codice:
#include using namespace std; // first name space namespace first_space { void func() { cout << 'Inside first_space' << endl; } } // second name space namespace second_space { void func() { cout << 'Inside second_space' << endl; } } using namespace first_space; int main () { // This calls function from first name space. func(); return 0; }
I nomi introdotti in una direttiva using obbediscono alle normali regole di ambito. Il nome è visibile dal punto della direttiva using fino alla fine dell'ambito in cui si trova la direttiva. Le entità con lo stesso nome definite in un ambito esterno vengono nascoste.
Spazi dei nomi nidificati:
Gli spazi dei nomi possono essere nidificati in cui è possibile definire uno spazio dei nomi all'interno di un altro spazio dei nomi come segue:
SYNTAX: namespace namespace_name1 { // code declarations namespace namespace_name2 { // code declarations } } È possibile accedere ai membri dello spazio dei nomi nidificato utilizzando gli operatori di risoluzione come segue:
// per accedere ai membri di namespace_name2
utilizzando lo spazio dei nomi namespace_name1::namespace_name2;
// per accedere ai membri di namespace:name1
utilizzando lo spazio dei nomi namespace_name1;
Nelle dichiarazioni precedenti, se stai utilizzando namespace_name1, gli elementi di namespace_name2 saranno disponibili nell'ambito come segue:
#include using namespace std; // first name space namespace first_space { void func() { cout << 'Inside first_space' << endl; } // second name space namespace second_space { void func() { cout << 'Inside second_space' << endl; } } } using namespace first_space::second_space; int main () { // This calls function from second name space. func(); return 0; }
È anche possibile creare più di uno spazio dei nomi nello spazio globale. Questo può essere fatto in due modi.
-
Produzione:
-
Produzione:
- Sono utilizzabili direttamente nello stesso programma e vengono utilizzati per dichiarare identificatori univoci.
- Negli spazi dei nomi senza nome il nome dello spazio dei nomi non è menzionato nella dichiarazione dello spazio dei nomi.
- Il nome dello spazio dei nomi viene generato in modo univoco dal compilatore.
- Gli spazi dei nomi senza nome che hai creato saranno accessibili solo all'interno del file in cui li hai creati.
- Gli spazi dei nomi senza nome sostituiscono la dichiarazione statica delle variabili.
CPP
// A C++ program to show more than one namespaces // with different names. #include using namespace std; // first name space namespace first { int func() { return 5; } } // second name space namespace second { int func() { return 10; } } int main() { // member function of namespace // accessed using scope resolution operator cout << first::func() <<"n"; cout << second::func() <<"n"; return 0; }
5 10
È anche possibile creare due blocchi di namespace con lo stesso nome. Il secondo blocco dello spazio dei nomi non è altro che in realtà la continuazione del primo spazio dei nomi. In parole più semplici possiamo dire che entrambi i namespace non sono diversi ma in realtà gli stessi che vengono definiti in parti.
CPP
// C++ program to demonstrate namespace extension #include using namespace std; // first name space namespace first { int val1 = 500; } // rest part of the first namespace namespace first { int val2 = 501; } int main() { cout << first::val1 <<"n"; cout << first::val2 <<"n"; return 0; }
500 501
Spazi dei nomi senza nome
// C++ program to demonstrate working of unnamed // namespaces #include using namespace std; // unnamed namespace declaration namespace { int rel = 300; } int main() { cout << rel << "n"; // prints 300 return 0; }
Produzione:
300
Java è uguale a