C ++

Ruang Nama C ++

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

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

#sertakan
menggunakan ruang nama std;
int varId = 5;
float varId = 2.3;
int utama ()

pulangan 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 berbeza 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 ruang nama std;
ruang nama NA

int varId = 5;

ruang nama NB

float varId = 2.3;

int utama ()

cout << NA::varId << '\n';
cout << NB::varId << '\n';
pulangan 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 operator 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 linuxhint.laman web 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 ruang nama std;
int ident = 55;
apungan ident = 12.17;
int utama ()

pulangan 0;

Dalam program di atas, terdapat dua pemboleh ubah, kedua-duanya 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 ruang nama std;
ruang nama NA

int varInt = 6;
float flt;

ruang nama NB

int varInt = 7;
float flt;

int utama ()

cout << NA::varInt << '\n';
cout << NB::varInt << '\n';
NA :: flt = 2.5;
NB :: flt = 4.8;
cout << NA::flt << '\n';
cout << NB::flt << '\n';
pulangan 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 tersuai adalah ruang nama bersarang untuk ruang nama global.

Arahan penggunaan

Untuk mengelakkan mengetik "namepace :: name" sepanjang masa dan bukan hanya "name" 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 ruang nama std;
ruang nama NB

int varInt = 7;
int func ()

mengembalikan varInt;


int fn ()

menggunakan ruang nama NB;
int myVar2 = func ();
// objek dan fungsi lain dari NB ikuti.
kembalikan myVar2;

int myVar3 = NB :: func ();
int utama ()

cout << fn() << " << myVar3 << '\n';
pulangan 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 disebut tepat di bawah itu, tanpa mendahului dengan “NB ::."

Pemboleh ubah yang dinyatakan dalam skop global (global namespace) 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). Dalam keadaan ini, untuk menggunakan "func ()"Di luar blok ruang nama NB (ruang lingkup), ia mesti didahului oleh"NB ::,"Seperti dalam pernyataan berikut:

int myVar3 = NB :: func ();

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 kod).

#sertakan
menggunakan ruang nama std;
ruang nama NA

int varInt = 6;
int func ()

mengembalikan varInt;


ruang nama NB

int varInt = 7;
int func ()

mengembalikan varInt;


menggunakan ruang nama NA;
int myVar0 = varInt;
// objek dan fungsi lain dari :: dan NB ikuti.
int fn ()

int myVar1 = varInt;
menggunakan ruang nama NB;
int myVar2 = NB :: func ();
// objek dan fungsi lain dari NB mengikuti, hingga akhir skop ini.
pulangkan myVar1 + myVar2;

// Hanya objek dan fungsi dari :: dan NB yang diikuti.
int myVar3 = NB :: func ();
int utama ()

cout << myVar0 << " << fn() << " << myVar3 << '\n';
pulangan 0;

Keluarannya adalah 6, 13, 7.

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

Di bawah pernyataan, "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 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 dapat digunakan di fn () ruang lingkup tanpa mendahului dengan "NB ::,"Hanya jika ia tidak berlaku di NA dan ruang nama global (blok). Jika tidak, ia harus didahului dengan "NB ::."Kawasan gabungan ruang nama untuk NA dan global terus 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.

Nota: 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 ruang nama std;
ruang nama A

int i = 1;
ruang nama B

int i = 2;
ruang nama C

int i = 3;



int utama ()

cout << A::i << " << A::B::i << " << A::B::C::i << '\n';
pulangan 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 std. Perpustakaan standard mengandungi sub-perpustakaan, dan salah satu sub-perpustakaan ini adalah iostream. The iostream perpustakaan mengandungi objek cout, yang digunakan untuk menghantar hasil ke konsol (terminal).

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

#sertakan
menggunakan ruang nama std;

Perhatikan penggunaan menggunakan arahan dan std. Istilah “#sertakan Adalah arahan preprocessor dan tidak berakhir dengan titik koma. Ini termasuk "file" iostream pada kedudukan arahannya.

Kesimpulannya

Ruang nama adalah ruang lingkup. Huraian ruang nama (definisi) mengandungi pernyataan asas dan / atau definisi objek, fungsi, dan entiti C ++ lain. Di luar definisi ruang nama, nama dapat diakses dengan sintaks, "namespaceName :: nama."Selain ruang nama global (ruang lingkup global), ruang nama apa pun harus dinyatakan dalam satu blok. Blok itu adalah bahagian pertama dari kawasan ruang nama yang mungkin diedarkan. Dengan menggunakan arahan, ruang nama dapat diperluas sebagai wilayah di ruang lingkup 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

Cara Memasang dan Memainkan Doom di Linux
Pengenalan Doom Seri Doom berasal dari tahun 90an selepas pembebasan Doom yang asal. Ini adalah hit seketika dan sejak saat itu dan seterusnya siri pe...
Vulkan untuk Pengguna Linux
Dengan setiap kad grafik generasi baru, kami melihat pembangun permainan mendorong had kesetiaan grafik dan semakin dekat dengan fotorealisme. Tetapi ...
OpenTTD vs Simutrans
Membuat simulasi pengangkutan anda sendiri boleh menyeronokkan, santai dan sangat menarik. Itulah sebabnya anda perlu memastikan bahawa anda mencuba s...