logo

Vārdtelpa C++ | 1. komplekts (ievads)

  • Nosaukumtelpa nodrošina vietu, kur mēs varam definēt vai deklarēt identifikatoru, t.i., mainīgo, metodi, klases.
  • Izmantojot nosaukumvietu, varat definēt telpu vai kontekstu, kurā tiek definēti identifikatori, t.i., mainīgais, metode, klases. Būtībā nosaukumvieta nosaka darbības jomu.

Vārdtelpas priekšrocība, lai izvairītos no vārdu sadursmes.

  • Piemēram, jūs varētu rakstīt kādu kodu, kuram ir funkcija xyz (), un ir pieejama cita bibliotēka, kurai arī ir tāda pati funkcija xyz (). Tagad kompilators nevar zināt, uz kuru funkcijas xyz () versiju jūs atsaucāties savā kodā.
  • Nosaukumtelpa ir paredzēta, lai pārvarētu šo grūtību, un tiek izmantota kā papildu informācija, lai atšķirtu līdzīgas funkcijas, klases, mainīgos utt. ar vienādu nosaukumu, kas pieejams dažādās bibliotēkās.
  • Labākais nosaukumvietas darbības jomas piemērs ir C++ standarta bibliotēka (std), kurā ir deklarētas visas klases, metodes un veidnes. Tāpēc, rakstot C++ programmu, mēs parasti iekļaujam direktīvu, izmantojot namespace std;

Nosaukumvietas definēšana:

  • Nosaukumvietas definīcija sākas ar atslēgvārdu nosaukumvietas nosaukumu, kam seko nosaukumvietas nosaukums:
namespace namespace_name { // code declarations i.e. variable (int a;) method (void add();) classes ( class student{};) }>
  • Jāņem vērā, ka pēc aizverošās figūriekavas nav semikola (;).
  • Lai izsauktu funkcijas vai mainīgā versiju ar iespējotu nosaukumvietas nosaukumu, pievienojiet nosaukumvietas nosaukumu šādi:
  • namespace_name: :code; // kods var būt mainīgs , funkcija vai klase.

Lietošanas direktīva:

  • Varat arī izvairīties no nosaukumvietu pievienošanas, izmantojot nosaukumvietas direktīvu. Šī direktīva norāda kompilatoram, ka nākamais kods izmanto nosaukumus norādītajā nosaukumvietā.
  • Tādējādi nosaukumvieta ir paredzēta šādam kodam:

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

>

>

Izvade

Inside first_space>
  • Nosaukumi, kas ieviesti lietošanas direktīvā, atbilst parastajiem darbības jomas noteikumiem. Nosaukums ir redzams no lietošanas direktīvas punkta līdz tvēruma beigām, kurā direktīva atrodas. Entītijas ar tādu pašu nosaukumu, kas definētas ārējā tvērumā, ir paslēptas.

Ligzdotas nosaukumvietas:

  • Nosaukumvietas var ligzdot, kur var definēt vienu nosaukumvietu citā nosaukumvietā šādi:
SYNTAX: namespace namespace_name1 { // code declarations namespace namespace_name2 { // code declarations } }>

Jūs varat piekļūt ligzdotās nosaukumvietas dalībniekiem, izmantojot izšķirtspējas operatorus, kā norādīts tālāk.
// lai piekļūtu nosaukumvietas_nosaukums2 dalībniekiem
izmantojot nosaukumvietu namespace_name1::namespace_name2;
// lai piekļūtu nosaukumvietas_nosaukums1 dalībniekiem
izmantojot nosaukumvietu namespace_name1;

Iepriekš minētajos paziņojumos, ja izmantojat nosaukumvietas_nosaukums1, nosaukumvietas_nosaukums2 elementi būs pieejami tvērumā šādi:

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

>

>

Izvade

Inside second_space>

Apskatīsim, kā nosaukumvietas aptver entītijas, tostarp mainīgo un 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;> }>

>

>

Izvade

Inside first_space Inside second_space>

Apsveriet šādu C++ programmu:

CPP




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

>

>

Izvade:

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

Katrā tvērumā nosaukums var attēlot tikai vienu entītiju. Tātad vienā tvērumā nevar būt divi mainīgie ar vienādu nosaukumu. Izmantojot nosaukumvietas, mēs varam izveidot divus mainīgos vai dalībnieku funkcijas ar vienādu nosaukumu.

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

>

>

Izvade

500>

Definīcija un izveide: Nosaukumvietas ļauj grupēt nosauktas entītijas, kuras citādi būtu globālā mērogā šaurākās jomās, piešķirot tām nosaukumvietas darbības joma . Tas ļauj organizēt programmu elementus dažādos loģiskos apmēros, kas apzīmēti ar nosaukumiem. Vārdtelpas nodrošina vietu, kur mēs varam definēt vai deklarēt identifikatorus, t.i., mainīgo nosaukumus, metodes, klases utt.

  • Nosaukumvieta ir funkcija, kas pievienota C++, un tā nav pieejama C.
  • Nosaukumtelpa ir deklaratīvs apgabals, kas nodrošina tvērumu tajā esošajiem identifikatoriem (funkciju nosaukumiem, mainīgajiem vai citiem lietotāja definētiem datu tipiem).
  • Ir atļauti vairāki nosaukumvietas bloki ar vienādu nosaukumu. Visas deklarācijas šajos blokos tiek deklarētas nosauktajā tvērumā.

Nosaukumvietas definīcija sākas ar atslēgvārdu nosaukumvieta kam seko nosaukumvietas nosaukums:

namespace namespace_name { int x, y; // code declarations where // x and y are declared in // namespace_name's scope }>
  • Nosaukumvietas deklarācijas parādās tikai globālā mērogā.
  • Nosaukumvietas deklarācijas var ligzdot citā nosaukumvietā.
  • Nosaukumvietas deklarācijām nav piekļuves specifikāciju (publiskas vai privātas).
  • Nav nepieciešams ievadīt semikolu pēc nosaukumvietas definīcijas beigu iekavas.
  • Mēs varam sadalīt nosaukumvietas definīciju vairākās vienībās.

Nosaukumvietas noteikšana:

Nosaukumvietas definīcija sākas ar atslēgvārdu nosaukumvietas nosaukumu, kam seko nosaukumvietas nosaukums:

alfa beta atzarošanas piemērs

C++




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

>

>

Jāņem vērā, ka pēc aizverošās figūriekavas nav semikola (;).
Lai izsauktu funkcijas vai mainīgā versiju ar iespējotu nosaukumvietas nosaukumu, pievienojiet nosaukumvietas nosaukumu šādi:

namespace_name: :code; // kods var būt mainīgais, funkcija vai klase.

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>

>

>

Izvade

Inside first_space Inside second_space>

Lietošanas direktīva:

Varat izvairīties no nosaukumvietu pievienošanas, izmantojot nosaukumvietas direktīvu. Šī direktīva norāda kompilatoram, ka nākamais kods izmanto nosaukumus norādītajā nosaukumvietā. Tādējādi nosaukumvieta ir paredzēta šādam kodam:

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>

>

>

Izvade

Inside first_space>

Tā vietā, lai piekļūtu visai nosaukumvietai, cita opcija (pazīstama kā izmantojot deklarācija) ir piekļuve noteiktam vienumam nosaukumvietā. Piemēram, ja vienīgā std nosaukumvietas daļa, ko plānojat izmantot, ir cout, varat uz to atsaukties šādi:
izmantojot std::cout;
Nākamais kods var attiekties uz cout, nepievienojot nosaukumvietu, taču citiem vienumiem std nosaukumvietā joprojām ir jābūt skaidri norādītiem šādi:

C++




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

>

>

Izvade

std::endl is used with std!>

Nosaukumi, kas ieviesti lietojuma direktīvā, atbilst parastajiem darbības jomas noteikumiem, t.i., tie ir redzami no lietošanas direktīvas rašanās brīža līdz tvēruma beigām, kurā direktīva atrodas. Entītijas ar tādu pašu nosaukumu, kas definētas ārējā tvērumā, ir paslēptas.

C++




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

>

>

Izvade:

5 200 100>

Klases un vārdu telpa: Šis ir vienkāršs veids, kā izveidot klases nosaukumvietā:

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

>

>

Izvade

ns::geek::display()>

Klasi var arī deklarēt nosaukumvietā un definēt ārpus nosaukumvietas izmantojot šādu sintaksi:

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

>

>

Izvade

ns::geek::display()>

Mēs varam definēt metodes arī ārpus nosaukumvietas . Šis ir koda piemērs:

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

>

>

Izvade:

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

Ligzdotas nosaukumvietas:

Nosaukumvietas var būt ligzdotas, t.i., jūs varat definēt vienu nosaukumvietu citā nosaukumvietā šādi:

C++




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

>

>

Jūs varat piekļūt ligzdotas nosaukumvietas dalībniekiem, izmantojot izšķirtspējas operatoru (::) šādi:

C++




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

>

>

Iepriekš minētajos priekšrakstos, ja izmantojat nosaukumvietas_nosaukums1, nosaukumvietas_nosaukums2 elementi būs pieejami tvērumā šādi:

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>

>

>

Izvade

Inside second_space>

Nosaukumtelpa nodrošina iespēju izvairīties no vārdu sadursmes: -

Piemēram, jūs varētu rakstīt kādu kodu, kuram ir funkcija xyz (), un jūsu kodā ir pieejama cita bibliotēka, kurai ir arī tāda pati funkcija xyz (). Tagad kompilators nevar zināt, uz kuru funkcijas xyz () versiju jūs atsaucāties savā kodā.
Nosaukumvieta ir paredzēta, lai pārvarētu šo grūtību, un tiek izmantota kā papildu informācija, lai atšķirtu līdzīgas funkcijas, klases, mainīgos u.c. ar vienādu nosaukumu, kas pieejams dažādās bibliotēkās.
Labākais nosaukumvietas darbības jomas piemērs ir C++ standarta bibliotēka (std), kurā ir deklarētas visas klases, metodes un veidnes. Tādējādi, rakstot C++ programmu, mēs parasti iekļaujam direktīvu
izmantojot namespace std;

nosaukumvieta valodā C++ | 2. kopa (nosaukumvietas un nenosauktās nosaukumvietas paplašināšana) Nosaukumvieta programmā C++ | 3. kopa (piekļuve, galvenes izveide, ligzdošana un aizstājvārds) Vai nosaukumvietas var ligzdot C++? Atsauce : http://www.cplusplus.com/doc/tutorial/namespaces/