Ruang Nama C ++

C Namespace



Ruang nama dalam C ++ adalah ruang lingkup umum. Pengisytiharannya dimulakan dengan kata kunci, ruang nama, diikuti dengan nama pilihan pengaturcara, dan kemudian blok dalam tanda kurung. Blok tersebut mengandungi pernyataan asas dan / atau definisi objek, fungsi, dan entiti lain C ++.

Pertimbangkan dua pernyataan skalar berikut dalam skop global, dalam program berikut:







#sertakan
menggunakan namespace std;

intvarId= 5;
terapungvarId= 2.3;

intutama()
{

kembali 0;
}

Percubaan untuk menyusun program ini menyebabkan ralat penyusunan. Terdapat dua pemboleh ubah dengan nama yang sama, varId . Walaupun mereka adalah dua pemboleh ubah yang berlainan dari dua jenis yang berbeza, int dan terapung , penyusun menolak kedua-dua deklarasi itu kerana nama mereka sama. Program berikut menyelesaikan masalah ini dengan menyatakan pemboleh ubah dengan nama yang sama dalam dua ruang lingkup umum yang berbeza:



#sertakan
menggunakan namespace std;

ruang nama NA
{
intvarId= 5;
}

ruang nama NB
{
terapungvarId= 2.3;
}

intutama()
{
kos<<NA::varId << ' n';
kos<<NB::varId << ' n';

kembali 0;
}

Keluarannya adalah seperti berikut:



5
2.3

Terdapat dua ruang nama dalam program di atas: NA , yang mempunyai definisi integer, dan NB , yang mempunyai definisi float tetapi dengan nama yang sama dengan integer untuk NA. Akhirnya, semasa program dijalankan, nama yang sama untuk dua pemboleh ubah yang berbeza digunakan. Perhatikan bahawa untuk mengakses nama yang sama dari dua pemboleh ubah yang berbeza, nama tertentu untuk ruang nama mesti digunakan, diikuti dengan pengenal umum. Nama ruang nama dan pengenal umum dipisahkan oleh pengendali resolusi skop, :: . Nama ruang nama akan membezakan objek.





Artikel ini merangkumi konsep asas ruang nama dan penggunaannya dalam bahasa pengaturcaraan C ++. Untuk mengikuti artikel ini, anda harus mempunyai pengetahuan asas mengenai bahasa C ++. Anda juga harus mempunyai pengetahuan mengenai skop C ++, walaupun dijelaskan secara ringkas dalam artikel ini. Untuk mengetahui lebih lanjut mengenai ruang lingkup C ++, cari frasa, Skop dalam C ++ (tanpa tanda petik) di kotak carian mana-mana laman web linuxhint.com dan tekan Enter. Ini akan membawa anda ke artikel yang ditulis oleh pengarang ini.

Kandungan Artikel

Apa itu Namespace?

Kawasan deklaratif adalah bahagian terbesar dari program di mana nama entiti (pemboleh ubah) berlaku. Wilayah ini disebut ruang lingkup. Ruang nama dalam C ++ adalah ruang lingkup umum yang tujuan utamanya adalah untuk menyelesaikan konflik nama. Ruang nama mempunyai pernyataan asas dan / atau definisi entiti.



Ruang Nama Global dan Masalahnya

Ruang nama global adalah ruang lingkup global. Pertimbangkan program pendek berikut:

#sertakan
menggunakan namespace std;

intident= 55;
terapungident= 12.17;

intutama()
{

kembali 0;
}

Dalam program di atas, terdapat dua pemboleh ubah, keduanya disebut ident . Pemboleh ubah ini berada dalam skop global; iaitu, mereka berada di ruang nama global. Percubaan untuk menyusun program ini akan gagal dengan mesej ralat. Skop global tidak menerima lebih dari satu pemboleh ubah dengan nama yang sama, jadi ada keperluan untuk ruang nama khusus.

Ruang Nama Tersuai

Ruang nama tidak mempunyai satu nama sahaja. Sebaliknya, ruang nama mempunyai sekumpulan nama untuk mengelakkan konflik dengan kumpulan nama lain. Untuk mengelakkan konflik lebih rendah dalam kod, mendahului setiap nama dengan nama ruang nama dan :: . Program berikut menggambarkan ini menggunakan dua ruang nama tersuai:

#sertakan
menggunakan namespace std;

ruang nama NA
{
intvarInt= 6;
terapungflt;
}

ruang nama NB
{
intvarInt= 7;
terapungflt;
}

intutama()
{
kos<<NA::varInt << ' n';
kos<<NB::varInt << ' n';
NA::flt = 2.5;
NB::flt = 4.8;
kos<<NA::flt << ' n';
kos<<NB::flt << ' n';

kembali 0;
}

Keluarannya adalah:

6
7
2.5
4.8

Perhatikan bahawa nama-nama NA :: flt dan NB :: flt akhirnya ditakrifkan dalam utama () fungsi. C ++ tidak membenarkan definisi sedemikian dalam skop global.

Perhatikan bahawa ruang nama khusus adalah ruang nama bersarang untuk ruang nama global.

Arahan penggunaan

Untuk mengelakkan mengetik nama nama :: nama sepanjang masa dan bukan hanya nama setelah menyatakan ruang nama, anda boleh menggunakan menggunakan arahan. Sintaks untuk menggunakan menggunakan arahan adalah seperti berikut:

menggunakan ruang nama Namespace_name;

The menggunakan direktif bukan arahan preprocessor, jadi berakhir dengan titik koma (;).

Program berikut menggambarkan penggunaan menggunakan arahan dan banyak lagi:

#sertakan
menggunakan namespace std;

ruang nama NB
{
intvarInt= 7;
intfungsi()
{
kembalivarInt;
}
}

intfn()
{
menggunakan ruang nama NB;
intmyVar2=fungsi();
// objek dan fungsi lain dari NB ikuti.
kembalimyVar2;
}

intmyVar3=NB::fungsi();

intutama()
{
kos<<fn() << '' <<myVar3<< ' n';

kembali 0;
}

Hasil daripada program ini adalah 7 7 . Istilah menggunakan ruang nama NB; telah ditempatkan pada awal fn () takrif. The func () dari ruang nama NB dipanggil tepat di bawah itu, tanpa sebelumnya NB :: .

Pemboleh ubah yang dinyatakan dalam skop global (ruang nama global) dilihat dari sudut perisytiharan hingga akhir fail. Ia juga dilihat di ruang nama bersarang (lingkup bersarang), seperti bersarang fn () skop fungsi di atas. The menggunakan arahan bergabung dengan ruang namanya dari kedudukan di mana ia diletakkan hingga akhir ruang lingkup di mana ia diletakkan.

Nama func () dari ruang nama NB tidak dapat dilihat di bawah fn () definisi kerana menggunakan ruang nama NB; diletakkan dalam ruang lingkup fungsi (blok). Di bawah keadaan ini, untuk digunakan func () di luar blok ruang nama NB (ruang lingkup), ia mesti didahului oleh NB :: , seperti dalam pernyataan berikut:

intmyVar3=NB::fungsi();

The menggunakan arahan bergabung dengan ruang namanya dengan ruang nama bersarang luar dari kedudukan di mana ia diletakkan hingga akhir ruang nama bersarang luar. Dalam program berikut, ruang nama NA digabungkan dengan ruang nama global. Kedua-dua ruang nama kemudian meluas ke fn () ruang nama definisi fungsi, di mana mereka digabungkan dengan ruang nama NB. Ruang nama NB berakhir pada akhir fn () definisi fungsi, dan dua ruang nama sebelumnya berterusan sehingga akhir fail (baca kodnya).

#sertakan
menggunakan namespace std;

ruang nama NA
{
intvarInt= 6;
intfungsi()
{
kembalivarInt;
}

}

ruang nama NB
{
intvarInt= 7;
intfungsi()
{
kembalivarInt;
}
}

menggunakan ruang nama NA;
intmyVar0=varInt;
// objek dan fungsi lain dari :: dan NB ikuti.

intfn()
{
intmyVar1=varInt;
menggunakan ruang nama NB;
intmyVar2=NB::fungsi();
// objek dan fungsi lain dari NB mengikuti, hingga akhir skop ini.
kembalimyVar1+myVar2;
}

// Hanya objek dan fungsi dari :: dan NB yang diikuti.

intmyVar3=NB::fungsi();

intutama()
{
kos<<myVar0<< '' <<fn() << '' <<myVar3<< ' n';

kembali 0;
}

Keluarannya adalah 6, 13, 7 .

Catatan: Ruang nama global ditunjukkan dengan :: , yang bermaksud bahawa tidak ada apa-apa sebelum pengendali resolusi skop yang mengikuti.

Di bawah pernyataan itu, menggunakan ruang nama NA; pemboleh ubah dari ruang nama global dan NA boleh digunakan tanpa menunjukkan ruang nama sumbernya. Pernyataan seterusnya menggunakan varInt ruang nama NA. Kawasan gabungan nama global dan NA meluas ke fn () ruang nama fungsi. Jadi varInt penyataan pertama di fn () skop fungsi, adalah dari ruang nama NA.

Oleh kerana wilayah untuk kawasan nama global dan NA meluas di seluruh fn () skop, selepas int myVar2 = NB :: func (); , sebarang nama dari ruang nama NB hanya boleh digunakan di fn () ruang lingkup tanpa mendahului dengan NB :: , hanya jika ia tidak berlaku di NA dan ruang nama global (blok). Jika tidak, ia mesti didahului oleh NB :: . Kawasan gabungan ruang nama untuk NA dan global terus berada di bawah fn () definisi dan ke dalam utama () berfungsi sehingga akhir fail.

Sambungan ruang nama NB bermula dari int myVar2 = NB :: func (); di dalam fn () bongkah dan berakhir di hujung fn () blok definisi.

Catatan: Ruang nama yang wilayahnya bergabung tidak boleh mempunyai nama pemboleh ubah yang sama di blok ruang nama mereka yang berbeza, kerana ini masih akan menimbulkan konflik.

Kawasan Ruang Nama

Ruang nama adalah ruang lingkup. Terlepas dari ruang nama global (ruang lingkup global), ruang nama apa pun harus dinyatakan dalam blok. Blok itu adalah bahagian pertama dari kawasan ruang nama yang mungkin diedarkan. Dengan arahan penggunaan, ruang nama dapat diperluas sebagai wilayah di wilayah lain.

Entiti yang diisytiharkan dalam badan ruang nama dikatakan sebagai anggota ruang nama, dan nama yang diperkenalkan oleh deklarasi ini ke wilayah deklarasi ruang nama dikatakan sebagai nama anggota ruang nama.

Ruang Nama Bersarang

Program berikut menunjukkan ruang nama bersarang:

#sertakan
menggunakan namespace std;

ruang nama A
{
inti= 1;
ruang nama B
{
inti= 2;
ruang nama C
{
inti= 3;
}
}
}

intutama()
{
kos<<KE::i << '' <<KE::B::i << '' <<KE::B::C::i << ' n';

kembali 0;
}

Keluarannya adalah:

1 2 3

Perhatikan bahawa ketiga-tiga nilai tersebut telah diakses menggunakan operator resolusi skop.

Ruang Nama Piawai

C ++ mempunyai perpustakaan yang disebut pustaka standard. Nama objek, fungsi, dan entiti lain di perpustakaan ini berasal dari ruang nama yang disebut ruang nama standard, ditulis sebagai Jam . Perpustakaan standard mengandungi sub-perpustakaan, dan salah satu sub-perpustakaan ini adalah iostream . The iostream perpustakaan mengandungi objek kos , yang digunakan untuk mengirim hasil ke konsol (terminal).

Nama kos mesti di Jam ruang nama. Untuk menggunakan iostream dengan yang Jam ruang nama, program ini hendaklah seperti berikut:

#sertakan
menggunakan namespace std;

Perhatikan penggunaan menggunakan arahan dan Jam . Istilah #sertakan adalah arahan preprocessor dan tidak berakhir dengan titik koma. Ini termasuk fail iostream pada kedudukan arahannya.

Kesimpulannya

Ruang nama adalah ruang lingkup. Huraian ruang nama (definisi) mengandungi pernyataan asas dan / atau definisi objek, fungsi, dan entiti lain C ++. Di luar definisi ruang nama, nama itu dapat diakses dengan sintaks, namespaceName :: nama . Terlepas dari ruang nama global (ruang lingkup global), ruang nama apa pun harus dinyatakan dalam blok. Blok itu adalah bahagian pertama dari kawasan ruang nama yang mungkin diedarkan. Dengan menggunakan arahan, ruang nama dapat diperluas sebagai wilayah di wilayah lain. Ruang nama yang wilayahnya bergabung tidak boleh mempunyai nama pemboleh ubah yang sama di blok ruang nama mereka yang berbeza, kerana ini masih akan menyebabkan konflik nama.

Chrys