namespaces c
Una panoramica completa degli spazi dei nomi in C ++ con semplici esempi.
Finora nei nostri tutorial precedenti, abbiamo visto tutto su variabili, dichiarazioni, funzioni e altre entità simili utilizzate in C ++.
Durante lo sviluppo di applicazioni in C ++ possono sorgere alcune situazioni particolari come gli stessi nomi di variabili usati due volte o funzioni definite con gli stessi prototipi ecc. .
=> Dai un'occhiata alla guida di formazione C ++ perfetta qui.
Cosa imparerai:
- Cos'è lo spazio dei nomi?
- Definizione di uno spazio dei nomi
- Accesso ai membri dello spazio dei nomi
- La direttiva sull'utilizzo
- Spazi dei nomi annidati
- Spazi dei nomi esterni
- Spazi dei nomi contigui
- Conclusione
- Lettura consigliata
Cos'è lo spazio dei nomi?
Vediamo l'esempio seguente:
#include #include int main() { int var; double var; std::cin>>var; }
Produzione:
Nella funzione 'int main ()':
8:10: errore: dichiarazione in conflitto 'double var'
7: 7: nota: dichiarazione precedente come 'int var'
Nell'esempio precedente, abbiamo definito due variabili con tipi diversi ma lo stesso identificatore. Quindi, quando compiliamo questo esempio, otteniamo un errore come mostrato nella finestra Output. Queste dichiarazioni in conflitto sorgono a causa dello stesso identificatore utilizzato per denominare due variabili.
Questo tipo di situazioni crea ambiguità nelle applicazioni.
C ++ introduce qualcosa chiamato ' spazi dei nomi 'Per risolvere questo problema. Lo spazio dei nomi in C ++ è proprio come un pacchetto, una regione o una libreria che viene utilizzata per distinguere tra la variabile o le funzioni con gli stessi identificatori.
Uno spazio dei nomi può contenere variabili, funzioni, classi o altri oggetti e persino un altro spazio dei nomi. È possibile fare riferimento a ogni membro dello spazio dei nomi utilizzando uno spazio dello spazio dei nomi. Questo aiuta il compilatore a distinguere tra varie entità di programmazione anche se hanno gli stessi nomi.
Definizione di uno spazio dei nomi
In C ++, possiamo definire uno spazio dei nomi utilizzando la parola chiave ' spazio dei nomi ' come mostrato di seguito:
namespace namespace_name{ namespace_declarations; }
Quindi, se dobbiamo definire uno spazio dei nomi denominato 'test_space', possiamo farlo come di seguito:
namespace test_space{ int var=10; }
La dichiarazione di cui sopra definisce uno spazio dei nomi denominato 'test_space'. Come mostrato, ha una variabile intera var come membro.
Accesso ai membri dello spazio dei nomi
Ora, abbiamo definito il nostro spazio dei nomi 'test_space' e come accediamo ai contenuti di questo spazio dei nomi?
Nel programma C ++, possiamo accedere ai membri dello spazio dei nomi utilizzando la sintassi:
servizi web c # domande di intervista
namespace_name::namespace_member;
Pertanto, è possibile accedere alla variabile intera var dichiarata nello spazio dei nomi 'test_space' sopra come segue:
test_space::var;
Vedere l'esempio completo di seguito per dimostrare gli spazi dei nomi e il loro utilizzo.
#include #include namespace test_space{ int var = 10; } int main() { double var = 20.53; std::cout<<'local var = '< Produzione:
var locale = 20.53
cos'è un file .bin?
test_space :: var = 10
Abbiamo dimostrato tutto sulla creazione e l'accesso allo spazio dei nomi nell'esempio di programmazione sopra. Come si vede, 'test_space' è uno spazio dei nomi che abbiamo definito. Ha una singola variabile intera var definita al suo interno. Quindi nella funzione principale, abbiamo un'altra variabile doppia var che viene inizializzata.
Successivamente vengono visualizzate entrambe queste variabili. Si noti che mentre la doppia variabile locale all'interno del main può essere stampata direttamente, per stampare la variabile dello spazio dei nomi, dobbiamo farla precedere con il nome dello spazio dei nomi.
Questo ha anche risolto il problema degli scontri tra le variabili a causa degli stessi nomi di cui abbiamo discusso in precedenza.
La direttiva sull'utilizzo
Nel nostro argomento precedente, abbiamo visto che possiamo accedere ai membri dello spazio dei nomi usando namespace_name :: namespace_member.
Se non si desidera specificare un nome di spazio dei nomi ovunque nel programma, è possibile utilizzare l'opzione ' utilizzando 'Per includere lo spazio dei nomi nel programma.
Questo viene fatto come segue:
#include #include namespace test_space{ int var = 10; } using namespace std; using namespace test_space; int main() { double var = 20.53; cout<<'local var = '< Produzione:
var locale = 20.53
test_space :: var = 10
Nell'esempio precedente, abbiamo utilizzato due istruzioni dopo aver definito lo spazio dei nomi 'test_space'.
Questi sono:
using namespace std; using namespace test_space;
La prima istruzione utilizza la dichiarazione per accedere allo spazio dei nomi 'std', che è uno spazio dei nomi standard predefinito nella libreria C ++. Questo spazio dei nomi viene utilizzato per accedere a varie funzioni come cin, cout, ecc.
La seconda istruzione viene utilizzata per includere lo spazio dei nomi 'test_space' nel programma.
Nella funzione main, possiamo vedere che le funzioni come cout e variabile var non devono essere precedute da un nome di spazio dei nomi. Possiamo riferirci direttamente a loro. Ma poiché var ha un nome in conflitto con una variabile locale nella funzione principale, viene fatto riferimento utilizzando l'operatore di risoluzione dell'ambito (: :) poiché anche gli spazi dei nomi hanno sempre un ambito globale.
Spazi dei nomi annidati
C ++ consente anche di avere spazi dei nomi annidati, ovvero uno spazio dei nomi definito all'interno di un altro spazio dei nomi.
La sintassi generale degli spazi dei nomi nidificati è la seguente:
namespace ns1{ ns1_code; namespace ns2{ ns2_code; } }
Se dobbiamo accedere a ns2_code, possiamo accedervi come segue:
ns1::ns2::ns2_code;
Dimostriamo gli spazi dei nomi annidati utilizzando il seguente esempio di codice.
#include #include namespace first{ int var = 10; namespace second{ int secVar = 20; } } using namespace std; using namespace first; using namespace first::second; int main() { double var = 20.53; cout<<'local var = '< Produzione:
var locale = 20.53
primo :: var = 10
secondo :: var = 20
Abbiamo utilizzato spazi dei nomi annidati nel programma sopra. Si noti il modo in cui la direttiva using viene utilizzata per accedere agli spazi dei nomi. Non è sufficiente fare riferimento una volta sola allo spazio dei nomi più interno. Se abbiamo bisogno di un codice dallo spazio dei nomi più esterno, dobbiamo riferirlo separatamente.
Possiamo usare un altro nome per gli spazi dei nomi noto come 'alias'. Ciò è particolarmente utile quando si utilizzano spazi dei nomi nidificati e il grado di annidamento è elevato.
Possiamo dimostrare l'alias per uno spazio dei nomi modificando l'esempio precedente.
#include #include namespace first{ int var = 10; namespace second{ int secVar = 20; } } using namespace std; using namespace first; namespace nested = first::second; int main() { double var = 20.53; cout<<'local var = '< Produzione:
miglior blocco degli annunci per mac chrome
var locale = 20.53
primo :: var = 10
secondo :: var = 20
Notare l'alias nidificato definito per lo spazio dei nomi first :: second. Una volta definito un alias, possiamo quindi fare riferimento allo spazio dei nomi utilizzando un nome alias.
Spazi dei nomi esterni
A volte, quando abbiamo troppi spazi dei nomi da utilizzare nella nostra applicazione, potremmo voler inserire tutti gli spazi dei nomi in un file separato. Questo può essere fatto facilmente. Quando gli spazi dei nomi sono nel file separato, includiamo semplicemente quel file nel nostro programma e quindi usiamo direttamente gli spazi dei nomi e il suo contenuto nel nostro programma.
Per esempio, se abbiamo un file denominato ns.h che contiene il seguente spazio dei nomi.
//ns.h namespace first{ int var = 25; }
Ora nel nostro programma, possiamo usare lo spazio dei nomi 'first' come segue:
#include #include “ns.h” using namespace std; int main() { cout<Quindi, una volta incluso il file contenente gli spazi dei nomi nel nostro programma, possiamo utilizzare gli spazi dei nomi come se fossero dichiarati globalmente nello stesso programma.
Spazi dei nomi contigui
Il C ++ ci permette anche di definire qualcosa chiamato come spazi dei nomi contigui. Gli spazi dei nomi contigui sono gli spazi dei nomi definiti più di una volta con lo stesso nome. In realtà, questi non sono spazi dei nomi separati ma le estensioni dello stesso spazio dei nomi.
Gli spazi dei nomi contigui sono evidenti nell'esempio seguente.
#include #include . namespace first{ int var = 10; } namespace first{ namespace second{ int secVar = 20; } } using namespace std; using namespace first; namespace nested = first::second; int main() { double var = 20.53; cout<<'local var = '< Produzione:
var locale = 20.53
primo :: var = 10
secondo :: var = 20
Si noti nell'esempio precedente che abbiamo definito lo stesso spazio dei nomi due volte. Nella prima definizione, abbiamo una variabile chiamata var. Mentre nella seconda dichiarazione abbiamo definito un altro spazio dei nomi.
Nella funzione principale, abbiamo avuto accesso ai membri dello spazio dei nomi esterno e interno e notiamo che i membri sono facilmente accessibili.
Questo è l'esempio di spazi dei nomi contigui, noti anche come 'spazi dei nomi discontinui' a volte. Le loro definizioni sembrano separate ma in realtà sono spazi dei nomi continui.
Conclusione
Con questo, siamo arrivati alla fine di questo tutorial sugli spazi dei nomi in C ++. Namespaces in un modo che ci consente di separare il nostro codice in diversi spazi o regioni in modo da avere chiarezza nella lettura e anche nell'uso dei suoi membri.
Nei nostri tutorial successivi, impareremo di più sui vari argomenti di base del C ++ come la gestione delle eccezioni, l'input / output di file, ecc.
=> Controlla qui per vedere i tutorial di formazione dalla A alla Z di C ++ qui.
Lettura consigliata
- Miglior serie di tutorial GRATUITI per C #: la guida definitiva a C # per principianti
- Test di carico con HP LoadRunner Tutorial
- Funzioni di libreria in C ++
- 70+ MIGLIORI tutorial C ++ per imparare la programmazione C ++ GRATUITAMENTE
- Programmazione orientata agli oggetti in C ++
- Elenchi di inizializzatori in C ++
- Iteratori in STL
- Incapsulamento in C ++