namespaces c
O prezentare completă a spațiilor de nume în C ++ cu exemple simple.
Până acum, în tutorialele noastre anterioare, am văzut totul despre variabile, declarații, funcții și alte astfel de entități utilizate în C ++.
În timp ce dezvoltăm aplicații în C ++, pot apărea unele situații deosebite, cum ar fi aceleași nume de variabile care sunt utilizate de două ori sau funcții definite cu aceleași prototipuri etc. .
=> Consultați aici ghidul perfect de formare C ++.
Ce veți învăța:
- Ce este namespace?
- Definirea unui spațiu de nume
- Accesarea membrilor spațiului de nume
- Directiva privind utilizarea
- Spații de nume imbricate
- Spații de nume externe
- Spații de nume adiacente
- Concluzie
- Lectură recomandată
Ce este namespace?
Să vedem exemplul de mai jos:
#include #include int main() { int var; double var; std::cin>>var; }
Ieșire:
În funcția ‘int main ()’:
8:10: eroare: declarație conflictuală „double var”
7: 7: notă: declarația anterioară ca „int var”
În exemplul de mai sus, am definit două variabile cu tipuri diferite, dar același identificator. Deci, atunci când compilăm acest exemplu, vom obține o eroare așa cum se arată în fereastra de ieșire. Aceste declarații conflictuale apar din cauza aceluiași identificator folosit pentru a denumi două variabile.
Acest tip de situații generează ambiguitate în aplicații.
C ++ introduce ceva numit „ spații de nume ”Pentru a rezolva această problemă. Spațiul de nume din C ++ este la fel ca un pachet sau o regiune sau o bibliotecă care este utilizată pentru a face diferența între variabilă sau funcții cu aceiași identificatori.
Un spațiu de nume poate conține variabile, funcții, clase sau alte obiecte și chiar un alt spațiu de nume. Fiecare membru al spațiului de nume poate fi menționat folosind un spațiu de nume. Acest lucru ajută compilatorul să facă diferența între diferite entități de programare, chiar dacă au aceleași nume.
Definirea unui spațiu de nume
În C ++, putem defini un spațiu de nume folosind cuvântul cheie „ spațiu de nume ' așa cum se arată mai jos:
namespace namespace_name{ namespace_declarations; }
Deci, dacă trebuie să definim un spațiu de nume numit „test_space”, îl putem face după cum urmează:
namespace test_space{ int var=10; }
Declarația de mai sus definește un spațiu de nume numit „test_space”. După cum se arată, are o variabilă întreagă var ca membru.
Accesarea membrilor spațiului de nume
Acum, ne-am definit propriul spațiu de nume „test_space” și cum accesăm conținutul acestui spațiu de nume?
În programul C ++, putem accesa membrii spațiului de nume folosind sintaxa:
namespace_name::namespace_member;
Astfel variabila întreagă var declarată în spațiul de nume „test_space” de mai sus poate fi accesată după cum urmează:
test_space::var;
Consultați Exemplul complet de mai jos pentru a demonstra spațiile de nume și utilizarea acestuia.
#include #include namespace test_space{ int var = 10; } int main() { double var = 20.53; std::cout<<'local var = '< Ieșire:
cum se elimină elementul matricei în java
local var = 20,53
test_space :: var = 10
Am demonstrat totul despre crearea și accesarea spațiului de nume în exemplul de programare de mai sus. După cum vedem, „test_space” este un spațiu de nume pe care l-am definit. Are o singură variabilă întreagă var definită în ea. Apoi, în funcția principală, avem o altă variabilă dublă var care este inițializată.
Mai târziu vom afișa ambele variabile. Rețineți că, în timp ce variabila dublă locală din interiorul main poate fi tipărită direct, pentru a imprima variabila spațiului de nume, trebuie să o precedăm cu numele spațiului de nume.
Acest lucru s-a ocupat și de problema ciocnirilor dintre variabile din cauza acelorași nume pe care le-am discutat mai devreme.
Directiva privind utilizarea
În subiectul nostru anterior, am văzut că putem accesa membrii spațiului de nume folosind namespace_name :: namespace_member.
Dacă nu dorim să specificăm un nume de spațiu de nume peste tot în program, putem folosi „ folosind ”Directivă pentru a include spațiul de nume în program.
cele mai bune site-uri de descărcare mp3 pentru Android
Acest lucru se face după cum urmează:
#include #include namespace test_space{ int var = 10; } using namespace std; using namespace test_space; int main() { double var = 20.53; cout<<'local var = '< Ieșire:
local var = 20,53
test_space :: var = 10
În exemplul de mai sus, am folosit două afirmații după definirea spațiului de nume „test_space”.
Acestea sunt:
using namespace std; using namespace test_space;
Prima declarație folosește declarația pentru a accesa spațiul de nume „std”, care este un spațiu de nume standard predefinit din biblioteca C ++. Acest spațiu de nume este utilizat pentru a accesa diverse funcții precum cin, cout etc.
A doua declarație este utilizată pentru a include spațiul de nume „test_space” în program.
În funcția principală, putem vedea că funcțiile precum cout și variabila var nu trebuie să fie precedate de un nume de spațiu de nume. Ne putem referi direct la ele. Dar, deoarece var are o confruntare de nume cu o variabilă locală în funcția principală, o referim folosind operatorul de rezoluție a sferei (: :), deoarece spațiile de nume au întotdeauna întindere globală.
Spații de nume imbricate
C ++ permite, de asemenea, să aveți spații de nume imbricate, adică un spațiu de nume definit în alt spațiu de nume.
Sintaxa generală a spațiilor de nume imbricate este după cum urmează:
namespace ns1{ ns1_code; namespace ns2{ ns2_code; } }
Dacă trebuie să accesăm ns2_code, îl putem accesa după cum urmează:
ns1::ns2::ns2_code;
Să demonstrăm spațiile de nume imbricate folosind următorul cod Exemplu.
#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 = '< Ieșire:
local var = 20,53
primul :: var = 10
al doilea :: var = 20
Am folosit spații de nume imbricate în programul de mai sus. Vă rugăm să rețineți modul în care se utilizează utilizarea directivei pentru a accesa spațiile de nume. Nu este suficient să faceți referire doar la cel mai interior spațiu de nume o dată. Dacă avem nevoie de un cod din spațiul de nume cel mai extern, trebuie să îl trimitem separat.
Putem folosi un alt nume pentru spațiile de nume cunoscute sub numele de „alias”. Acest lucru este util mai ales în timpul utilizării spațiilor de nume imbricate, iar gradul de cuibărire este ridicat.
Putem demonstra aliasul pentru un spațiu de nume modificând exemplul de mai sus.
#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 = '< Ieșire:
local var = 20,53
primul :: var = 10
al doilea :: var = 20
Rețineți aliasul imbricat care este definit pentru spațiul de nume first :: second. Odată ce un alias este definit, putem face referire la spațiul de nume folosind un nume de alias.
Spații de nume externe
Uneori, când avem prea multe spații de nume pentru a fi utilizate în aplicația noastră, este posibil să dorim să plasăm toate spațiile de nume într-un fișier separat. Acest lucru se poate face cu ușurință. Când spațiile de nume sunt în fișierul separat, includem fișierul respectiv în programul nostru și apoi folosim direct spațiile de nume și conținutul acestuia în programul nostru.
De exemplu, dacă avem un fișier numit ns.h care conține următorul spațiu de nume.
testarea aplicațiilor web întrebări și răspunsuri la interviu
//ns.h namespace first{ int var = 25; }
Acum, în programul nostru, putem folosi spațiul de nume „primul” după cum urmează:
#include #include “ns.h” using namespace std; int main() { cout<Deci, odată ce includem fișierul care conține spații de nume în programul nostru, putem folosi spațiile de nume ca și cum ar fi fost declarat global în același program.
Spații de nume adiacente
C ++ ne permite, de asemenea, să definim ceva numit ca spații de nume adiacente. Spațiile de nume adiacente sunt spațiile de nume care sunt definite de mai multe ori având același nume. În realitate, acestea nu sunt spații de nume separate, ci extensii ale aceluiași spațiu de nume.
Spațiile de nume adiacente sunt evidente în exemplul de mai jos.
#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 = '< Ieșire:
local var = 20,53
primul :: var = 10
al doilea :: var = 20
Observați în exemplul de mai sus că am definit același spațiu de nume de două ori. În prima definiție, avem o variabilă numită var. În timp ce în a doua declarație avem un alt spațiu de nume definit.
În funcția principală, am accesat membrii spațiului de nume exterior și interior și am observat că membrii sunt ușor de accesat.
Acesta este exemplul spațiilor de nume adiacente, care este cunoscut și sub denumirea de „spații de nume discontinue” uneori. Definițiile lor apar separat, dar în realitate sunt spații de nume continue.
Concluzie
Cu aceasta, am ajuns la sfârșitul acestui tutorial despre spațiile de nume în C ++. Spațiile de nume într-un mod care ne permite să separăm codul nostru în diferite spații sau regiuni, astfel încât să avem claritate în citirea acestuia și, de asemenea, în utilizarea membrilor săi.
În tutorialele noastre ulterioare, vom afla mai multe despre diferitele subiecte de bază ale C ++, cum ar fi gestionarea excepțiilor, intrarea / ieșirea fișierelor etc.
=> Verificați aici pentru a vedea A-Z a tutorialelor de formare C ++ aici.
Lectură recomandată
- Cea mai bună serie de tutoriale GRATUITE C #: Ghidul final C # pentru începători
- Testarea încărcării cu tutoriale HP LoadRunner
- Funcții de bibliotecă în C ++
- 70+ BEST Tutoriale C ++ Pentru a învăța programarea C ++ GRATUIT
- Programare orientată pe obiecte în C ++
- Listele inițializatorului în C ++
- Iteratori în STL
- Incapsulare în C ++