namespaces c
Una descripció completa dels espais de noms en C ++ amb exemples senzills.
Fins ara en els nostres tutorials anteriors, hem vist tot sobre variables, declaracions, funcions i altres entitats d’aquest tipus que s’utilitzen a C ++.
Mentre es desenvolupen aplicacions en C ++, poden sorgir algunes situacions peculiars, com ara que s’utilitzen els mateixos noms de variables dues vegades o que es defineixen funcions amb els mateixos prototips, etc. .
=> Consulteu aquí la guia de formació perfecta de C ++.
Què aprendreu:
- Què és l'espai de noms?
- Definició d'un espai de noms
- Accés als membres de l’espai de noms
- La Directiva d’ús
- Espais de noms imbricats
- Espais de noms externs
- Espais de noms contigus
- Conclusió
- Lectura recomanada
Què és l'espai de noms?
Vegeu l'exemple següent:
#include #include int main() { int var; double var; std::cin>>var; }
Sortida:
A la funció 'int main ()':
8:10: error: declaració conflictiva 'doble var'
7: 7: nota: declaració anterior com a 'int var'
A l'exemple anterior, hem definit dues variables amb tipus diferents però amb el mateix identificador. Per tant, quan compilem aquest exemple, rebem un error tal com es mostra a la finestra de sortida. Aquestes declaracions conflictives sorgeixen a causa del fet que s’utilitza el mateix identificador per nomenar dues variables.
Aquest tipus de situacions originen ambigüitats en les aplicacions.
C ++ introdueix una cosa anomenada “ espais de noms ”Per resoldre aquest problema. L’espai de noms a C ++ és com un paquet, una regió o una biblioteca que s’utilitza per diferenciar entre la variable o les funcions amb els mateixos identificadors.
Un espai de noms pot contenir variables, funcions, classes o altres objectes i fins i tot un altre espai de noms. Es pot referir a cada membre de l’espai de noms mitjançant un espai de noms. Això ajuda el compilador a diferenciar diverses entitats de programació encara que tinguin els mateixos noms.
Definició d'un espai de noms
A C ++, podem definir un espai de noms mitjançant la paraula clau ' espai de noms ”Com es mostra a continuació:
namespace namespace_name{ namespace_declarations; }
Per tant, si hem de definir un espai de noms anomenat 'test_space', ho podem fer de la següent manera:
namespace test_space{ int var=10; }
La declaració anterior defineix un espai de noms anomenat 'test_space'. Com es mostra, té una variable sencera var com a membre.
Accés als membres de l’espai de noms
Ara hem definit el nostre propi espai de noms 'test_space' i com accedim al contingut d'aquest espai de noms?
Al programa C ++, podem accedir als membres de l’espai de noms mitjançant la sintaxi:
namespace_name::namespace_member;
Per tant, es pot accedir a la variable sencera var declarada a l'espai de noms 'test_space' de la manera següent:
test_space::var;
Vegeu l'exemple complet següent per demostrar els espais de noms i el seu ús.
#include #include namespace test_space{ int var = 10; } int main() { double var = 20.53; std::cout<<'local var = '< Sortida:
var local = 20,53
espai_test :: var = 10
Hem demostrat tot sobre la creació i accés a l’espai de noms a l’exemple de programació anterior. Com veiem, 'test_space' és un espai de noms que hem definit. Té definida una variable entera única var. A continuació, a la funció principal, tenim una altra variable variable doble que s’inicialitza.
Més endavant mostrarem aquestes dues variables. Tingueu en compte que, tot i que la variable doble local dins de la pàgina principal es pot imprimir directament, per imprimir la variable d’espai de noms, hem de precedir-la amb el nom de l’espai de noms.
Això també ha tingut cura del problema dels enfrontaments entre les variables a causa dels mateixos noms que hem comentat anteriorment.
La Directiva d’ús
Al nostre tema anterior, vam veure que podem accedir als membres de l’espai de noms mitjançant namespace_name :: namespace_member.
Si no volem especificar un nom d’espai de noms a tot arreu del programa, podem fer ús del “ utilitzant ”Directiva per incloure l’espai de noms al programa.
Això es fa de la següent manera:
#include #include namespace test_space{ int var = 10; } using namespace std; using namespace test_space; int main() { double var = 20.53; cout<<'local var = '< Sortida:
var local = 20,53
com escriure un exemple de cas de prova
espai_test :: var = 10
A l'exemple anterior, hem utilitzat dues sentències després de definir l'espai de noms 'test_space'.
Aquests són:
using namespace std; using namespace test_space;
La primera sentència utilitza la declaració per accedir a l’espai de noms “std”, que és un espai de noms estàndard predefinit a la biblioteca C ++. Aquest espai de noms s’utilitza per accedir a diverses funcions com cin, cout, etc.
La segona sentència s’utilitza per incloure l’espai de noms “test_space” al programa.
A la funció principal, podem veure que les funcions com cout i variable var no necessiten estar precedides per un nom d’espai de noms. Podem fer-hi referència directament. Però com que var té un xoc de noms amb una variable local a la funció principal, el referim mitjançant l'operador de resolució d'abast (: :), ja que els espais de noms sempre tenen un abast global.
Espais de noms imbricats
C ++ també permet tenir espais de noms imbricats, és a dir, un espai de noms definit dins d’un altre espai de noms.
La sintaxi general dels espais de noms niats és la següent:
namespace ns1{ ns1_code; namespace ns2{ ns2_code; } }
Si hem d’accedir a ns2_code, podem accedir-hi de la manera següent:
ns1::ns2::ns2_code;
Demostrem els espais de noms imbricats mitjançant el següent exemple de codi.
#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 = '< Sortida:
var local = 20,53
primer :: var = 10
segon :: var = 20
Hem utilitzat espais de noms imbricats al programa anterior. Tingueu en compte la forma en què s’utilitza l’ús de directives per accedir als espais de noms. No n'hi ha prou amb referir només una vegada l'espai de noms més íntim. Si necessitem un codi des de l’espai de noms més extern, hem de referir-lo per separat.
Podem utilitzar un altre nom per als espais de noms coneguts com a 'àlies'. Això és especialment útil quan s’utilitzen espais de noms imbricats i el grau de nidificació és elevat.
Podem demostrar l'àlies d'un espai de noms modificant l'exemple anterior.
#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 = '< Sortida:
var local = 20,53
primer :: var = 10
segon :: var = 20
Tingueu en compte l’àlies imbricat que es defineix per a l’espai de noms first :: second. Un cop definit un àlies, podem referir-nos a l’espai de noms mitjançant un nom d’àlies.
Espais de noms externs
De vegades, quan tenim massa espais de noms per utilitzar a la nostra aplicació, és possible que vulgueu col·locar tots els espais de noms en un fitxer independent. Això es pot fer fàcilment. Quan els espais de noms es troben al fitxer separat, només hem d'incloure aquest fitxer al nostre programa i després utilitzarem directament els espais de noms i el seu contingut al nostre programa.
Per exemple, si tenim un fitxer anomenat ns.h que conté el següent espai de noms.
//ns.h namespace first{ int var = 25; }
Ara, al nostre programa, podem utilitzar l’espai de noms “primer” de la següent manera:
#include #include “ns.h” using namespace std; int main() { cout<Així, una vegada que incloem el fitxer que conté espais de noms al nostre programa, podem utilitzar els espais de noms com si estiguessin declarats globalment al mateix programa.
Espais de noms contigus
C ++ també ens permet definir alguna cosa anomenada com a espais de noms contigus. Els espais de noms contigus són els espais de noms que es defineixen més d’una vegada tenint el mateix nom. En realitat, no són espais de noms separats, sinó les extensions del mateix espai de noms.
Els espais de noms contigus són evidents a l'exemple següent.
#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 = '< Sortida:
var local = 20,53
primer :: var = 10
segon :: var = 20
Fixeu-vos en l'exemple anterior que hem definit el mateix espai de noms dues vegades. A la primera definició, tenim una variable anomenada var. Mentre que a la segona declaració tenim un altre espai de noms definit.
A la funció principal, hem accedit als membres de l’espai de noms extern i intern i hem tingut en compte que s’accedeix fàcilment als membres.
Aquest és l'exemple d'espais de noms contigus, que també es coneix de vegades com a 'espais de noms discontinus'. Les seves definicions apareixen separades, però en realitat són espais de noms continus.
Conclusió
Amb això, hem arribat al final d’aquest tutorial sobre espais de noms en C ++. Espais de noms d'una manera que ens permet separar el nostre codi en diferents espais o regions de manera que tinguem claredat en llegir-lo i també en utilitzar-ne els membres.
En els nostres tutorials posteriors, aprendrem més sobre els diversos temes bàsics de C ++ com el maneig d’excepcions, l’entrada / sortida de fitxers, etc.
=> Consulteu aquí per veure els tutorials de formació A-Z de C ++ aquí.
Lectura recomanada
- Millor sèrie de tutorials C # GRATU :TS: la millor guia C # per a principiants
- Prova de càrrega amb tutorials HP LoadRunner
- Funcions de biblioteca a C ++
- 70+ BEST Tutorials C ++ per aprendre programació C ++ GRATIS
- Programació orientada a objectes en C ++
- Llistes d'inicialitzadors a C ++
- Iteradors a STL
- Encapsulació en C ++