logo

Vardų erdvė C++ | 1 rinkinys (įvadas)

  • Vardų erdvė suteikia erdvę, kurioje galime apibrėžti arba deklaruoti identifikatorių, ty kintamąjį, metodą, klases.
  • Naudodami vardų erdvę galite apibrėžti erdvę arba kontekstą, kuriame apibrėžiami identifikatoriai, ty kintamasis, metodas, klasės. Iš esmės vardų erdvė apibrėžia taikymo sritį.

Vardų erdvės pranašumas siekiant išvengti vardų susidūrimo.

  • Pavyzdžiui, galite rašyti kodą, kuriame yra funkcija, vadinama xyz (), ir yra kita biblioteka, kuri taip pat turi tą pačią funkciją xyz (). Dabar kompiliatorius negali žinoti, kurią xyz () funkcijos versiją nurodote savo kode.
  • Vardų erdvė sukurta siekiant įveikti šį sunkumą ir naudojama kaip papildoma informacija atskirti panašias funkcijas, klases, kintamuosius ir tt su tuo pačiu pavadinimu, prieinamu skirtingose ​​bibliotekose.
  • Geriausias vardų erdvės apimties pavyzdys yra C++ standartinė biblioteka (std), kurioje deklaruojamos visos klasės, metodai ir šablonai. Todėl rašydami C++ programą paprastai įtraukiame direktyvą naudodami vardų erdvę std;

Vardų erdvės apibrėžimas:

  • Vardų erdvės apibrėžimas prasideda raktinio žodžio vardų erdve, po kurios nurodomas vardų srities pavadinimas, kaip nurodyta toliau:
namespace namespace_name { // code declarations i.e. variable (int a;) method (void add();) classes ( class student{};) }>
  • Pažymėtina, kad kabliataškis (;) nėra po uždaromojo skliausto.
  • Norėdami iškviesti bet kurios funkcijos arba kintamojo versiją, kurioje įgalinta vardų sritis, pridėkite vardų srities pavadinimą taip:
  • vardų erdvės_pavadinimas: :kodas; // kodas gali būti kintamasis , funkcija arba klasė.

Naudojimo direktyva:

  • Taip pat galite išvengti vardų erdvių pridėjimo naudodami vardų erdvės naudojimo direktyvą. Ši direktyva nurodo kompiliatoriui, kad tolesnis kodas naudoja vardus nurodytoje vardų erdvėje.
  • Taigi vardų erdvė numanoma tokiam kodui:

C++








#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švestis

Inside first_space>
  • Vardai, įvesti į naudojimo direktyvą, paklūsta įprastoms apimties taisyklėms. Pavadinimas matomas nuo naudojimo direktyvos taško iki srities, kurioje yra direktyva, pabaigos. Objektai su tuo pačiu pavadinimu, apibrėžti išorinėje srityje, yra paslėpti.

Įdėtos vardų erdvės:

  • Vardų erdvės gali būti įdėtos, kur galite apibrėžti vieną vardų erdvę kitoje vardų erdvėje taip:
SYNTAX: namespace namespace_name1 { // code declarations namespace namespace_name2 { // code declarations } }>

Įdėtosios vardų erdvės narius galite pasiekti naudodami skyros operatorius, kaip nurodyta toliau:
// norėdami pasiekti vardų erdvės_vardas2 narius
naudojant vardų erdvę vardų erdvės_vardas1::vardų erdvės_vardas2;
// norėdami pasiekti vardų erdvės_vardas1 narius
naudojant vardų sritį vardų erdvės_vardas1;

Aukščiau pateiktuose teiginiuose, jei naudojate vardų erdvės_vardas1, tada vardų erdvės_pavadinimas2 elementai bus pasiekiami apimtyje taip:

C++




#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;> }>

>

desc lentelė mysql
>

Išvestis

Inside second_space>

Pažiūrėkime, kaip vardų erdvė apima objektus, įskaitant kintamąjį ir funkcijas:

C++




#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;> >}> }> int> main ()> {> >// Calls function from first name space.> >first_space :: func();> >// Calls function from second name space.> >second_space :: func();> >return> 0;> }>

>

>

Išvestis

Inside first_space Inside second_space>

Apsvarstykite šią C++ programą:

CPP




// A program to demonstrate need of namespace> int> main()> {> >int> value;> >value = 0;> >double> value;>// Error here> >value = 0.0;> }>

>

>

Išvestis:

Compiler Error: 'value' has a previous declaration as 'int value'>

Kiekvienoje srityje pavadinimas gali reikšti tik vieną objektą. Taigi toje pačioje srityje negali būti dviejų kintamųjų tuo pačiu pavadinimu. Naudodami vardų sritis, galime sukurti du kintamuosius arba narių funkcijas, turinčias tą patį pavadinimą.

CPP




// Here we can see that more than one variables> // are being used without reporting any error.> // That is because they are declared in the> // different namespaces and scopes.> #include> using> namespace> std;> // Variable created inside namespace> namespace> first {> int> val = 500;> }> // Global variable> int> val = 100;> int> main()> {> >// Local variable> >int> val = 200;> >// These variables can be accessed from> >// outside the namespace using the scope> >// operator ::> >cout << first::val <<>' '>;> >return> 0;> }>

Python yra skaitinis

>

>

Išvestis

500>

Apibrėžimas ir kūrimas: Vardų erdvės leidžia sugrupuoti pavadintus objektus, kurie kitu atveju turėtų pasaulinė apimtis į siauresnes sritis, suteikiant jas vardų erdvės apimtis . Tai leidžia suskirstyti programų elementus į skirtingas logines apimtis, nurodytas pavadinimais. Vardų erdvės suteikia erdvę, kurioje galime apibrėžti arba deklaruoti identifikatorius, ty kintamųjų pavadinimus, metodus, klases ir kt.

  • Vardų erdvė yra funkcija, įtraukta į C++ ir jos nėra C.
  • Vardų erdvė yra deklaratyvi sritis, suteikianti joje esančių identifikatorių (funkcijų pavadinimų, kintamųjų ar kitų vartotojo nustatytų duomenų tipų) apimtį.
  • Leidžiami keli vardų erdvės blokai tuo pačiu pavadinimu. Visos tuose blokuose esančios deklaracijos yra deklaruojamos nurodytoje srityje.

Vardų erdvės apibrėžimas prasideda raktiniu žodžiu vardų erdvė po kurio nurodomas vardų srities pavadinimas:

namespace namespace_name { int x, y; // code declarations where // x and y are declared in // namespace_name's scope }>
  • Vardų erdvės deklaracijos rodomos tik visuotiniu mastu.
  • Vardų erdvės deklaracijos gali būti įdėtos į kitą vardų erdvę.
  • Vardų erdvės deklaracijos neturi prieigos specifikacijų (viešos ar privačios).
  • Nereikia duoti kabliataškio po vardų srities apibrėžimo baigiamojo skliausto.
  • Vardų erdvės apibrėžimą galime padalyti į kelis vienetus.

Vardų erdvės apibrėžimas:

Vardų erdvės apibrėžimas prasideda raktinio žodžio vardų erdve, po kurios nurodomas vardų srities pavadinimas, kaip nurodyta toliau:

C++




namespace> namespace_name{> >// code declarations i.e. variable (int a;)> >method (>void> add();)> >classes (>class> student{};)> }>

>

>

Pažymėtina, kad kabliataškis (;) nėra po uždaromojo skliausto.
Norėdami iškviesti funkcijos arba kintamojo versiją, kurioje įgalinta vardų sritis, pridėkite vardų srities pavadinimą taip:

vardų erdvės_pavadinimas: :kodas; // kodas gali būti kintamasis, funkcija arba klasė.

C++




// Let us see how namespace scope the entities including variable and functions:> #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;> >}> }> int> main ()> {> >// Calls function from first name space.> >first_space::func();> >// Calls function from second name space.> >second_space::func();> >return> 0;> }> // If we compile and run above code, this would produce the following result:> // Inside first_space> // Inside second_space>

>

>

Išvestis

Inside first_space Inside second_space>

Naudojimo direktyva:

Galite išvengti vardų erdvių pridėjimo naudodami vardų erdvės naudojimo direktyvą. Ši direktyva nurodo kompiliatoriui, kad tolesnis kodas naudoja vardus nurodytoje vardų erdvėje. Taigi vardų erdvė numanoma tokiam kodui:

C++




#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;> }> // If we compile and run above code, this would produce the following result:> // Inside first_space>

>

>

Išvestis

Inside first_space>

Vietoj prieigos prie visos vardų erdvės, kita parinktis (žinoma kaip naudojant deklaracija) yra pasiekti tam tikrą elementą vardų erdvėje. Pavyzdžiui, jei vienintelė std vardų erdvės dalis, kurią ketinate naudoti, yra cout, galite ją nurodyti taip:
naudojant std::cout;
Tolesnis kodas gali reikšti cout nepridedant vardų erdvės, bet kiti std vardų erdvės elementai vis tiek turės būti aiškūs taip:

C++




#include> using> std::cout;> int> main ()> {> >cout <<>'std::endl is used with std!'> << std::endl;> >return> 0;> }>

>

>

Išvestis

std::endl is used with std!>

Vardai, įvesti į naudojimo direktyvą, paklūsta normalios apimties taisyklėms, t. Objektai su tuo pačiu pavadinimu, apibrėžti išorinėje srityje, yra paslėpti.

C++


abėcėlė ir skaičiai



// Creating namespaces> #include> using> namespace> std;> namespace> ns1 {> int> value() {>return> 5; }> }>// namespace ns1> namespace> ns2 {> const> double> x = 100;> double> value() {>return> 2 * x; }> }>// namespace ns2> int> main()> {> >// Access value function within ns1> >cout << ns1::value() <<>' '>;> >// Access value function within ns2> >cout << ns2::value() <<>' '>;> >// Access variable x directly> >cout << ns2::x <<>' '>;> >return> 0;> }>

>

>

Išvestis:

5 200 100>

Klasės ir vardų erdvė: Toliau pateikiamas paprastas būdas sukurti klases vardų erdvėje:

C++




// A C++ program to demonstrate use of class> // in a namespace> #include> using> namespace> std;> namespace> ns> {> >// A Class in a namespace> >class> geek> >{> >public>:> >void> display()> >{> >cout<<>'ns::geek::display()'>< } }; } int main() { // Creating Object of geek Class ns::geek obj; obj.display(); return 0; }>

>

>

„Java“ kartojimas
Išvestis

ns::geek::display()>

Klasė taip pat gali būti paskelbta vardų erdvėje ir apibrėžta už vardų srities ribų naudojant šią sintaksę:

CPP




// A C++ program to demonstrate use of class> // in a namespace> #include> using> namespace> std;> namespace> ns {> // Only declaring class here> class> geek;> }>// namespace ns> // Defining class outside> class> ns::geek {> public>:> >void> display() { cout <<>'ns::geek::display() '>; }> };> int> main()> {> >// Creating Object of geek Class> >ns::geek obj;> >obj.display();> >return> 0;> }>

>

>

Išvestis

ns::geek::display()>

Mes galime apibrėžti metodus ir už vardų erdvės ribų . Toliau pateikiamas kodo pavyzdys:

C++




// A C++ code to demonstrate that we can define> // methods outside namespace.> #include> using> namespace> std;> // Creating a namespace> namespace> ns {> void> display();> class> geek {> public>:> >void> display();> };> }>// namespace ns> // Defining methods of namespace> void> ns::geek::display()> {> >cout <<>'ns::geek::display() '>;> }> void> ns::display() { cout <<>'ns::display() '>; }> // Driver code> int> main()> {> >ns::geek obj;> >ns::display();> >obj.display();> >return> 0;> }>

>

>

Išvestis:

ns::display() ns::geek::display():>

Įdėtos vardų erdvės:

Vardų erdvės gali būti įdėtos, t. y. galite apibrėžti vieną vardų erdvę kitoje vardų erdvėje taip:

C++

dabartinė java data




namespace> namespace_name1 {> >// code declarations> >namespace> namespace_name2 {> >// code declarations> >}> }>

>

>

Įdėtos vardų erdvės narius galite pasiekti naudodami skyros operatorių (::) taip:

C++




// to access members of namespace_name2> using> namespace> namespace_name1::namespace_name2;> // to access members of namespace:name1> using> namespace> namespace_name1;>

>

>

Aukščiau pateiktuose teiginiuose, jei naudojate vardų erdvės_vardas1, tada vardų erdvės_pavadinimas2 elementai bus pasiekiami apimtyje taip:

C++




#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;> }> // If we compile and run above code, this would produce the following result:> // Inside second_space>

>

>

Išvestis

Inside second_space>

Vardų erdvė suteikia pranašumą išvengiant vardų susidūrimo:

Pavyzdžiui, galite rašyti kokį nors kodą, kuriame yra funkcija, vadinama xyz(), ir jūsų kode yra kita biblioteka, kuri taip pat turi tą pačią funkciją xyz(). Dabar kompiliatorius negali žinoti, kurią xyz () funkcijos versiją nurodote savo kode.
Vardų erdvė sukurta siekiant įveikti šį sunkumą ir naudojama kaip papildoma informacija atskirti panašias funkcijas, klases, kintamuosius ir tt su tuo pačiu pavadinimu, prieinamu skirtingose ​​bibliotekose.
Geriausias vardų erdvės apimties pavyzdys yra C++ standartinė biblioteka (std), kurioje deklaruojamos visos klasės, metodai ir šablonai. Taigi, rašydami C++ programą, paprastai įtraukiame direktyvą
naudojant vardų erdvę std;

vardų erdvė C++ | 2 rinkinys (vardų erdvės išplėtimas ir vardų erdvė be pavadinimo) vardų erdvė C++ | 3 rinkinys (prieiga, antraštės kūrimas, įdėjimas ir slapyvardis) Ar vardų sritis galima įdėti į C++? Nuoroda : http://www.cplusplus.com/doc/tutorial/namespaces/