C++ - namespace
By
Rachmat Santoso
—
Sabtu, 15 April 2017
—
Cplusplus
C++ - Contoh Program namespace |
#include <iostream>
#include <conio.h>
using namespace std;
void info()
{
cout<<"Mobil X punya 4 pintu"<<endl;
}
void info()
{
cout<<"Mobil Y punya 2 pintu"<<endl;
}
int main()
{
info();
_getche();
return 0;
}
Apabila dicompile program di atas akan memunculkan
pesan error, karena fungsi yang mempunyai nama yang sama yaitu void info()didefinisikan dua kali. Padahal tidak
diperbolehkan suatu definisi nama variabel, fungsi, atau kelas, dll dengan nama
yang sama lebih dari satu kali. Walaupun jika diperhatikan kedua fungsi
tersebut digunakan untuk tujuan yang berbeda.
Program di atas adalah contoh sederhana,
mungkin karena saking sederhananya kita cukup mengubah nama fungsinya dan
masalah pun selesai. Namun bagaimana jika kita sedang membuat sebuah proyek
yang besar yang melibatkan banyak library, misalkan kita mempunyai fungsi
cetak() dan fungsi cetak() lain yang berada pada library yang berbeda serta
fungsi dengan nama cetak() lain di library lainnya, yang mempunyai tugas yang
berbeda. Hal ini membuat compiler kebingungan untuk memilih fungsi cetak() mana
yang sebenarnya kita maksud. C++ mempunyai solusi untuk mengatasi
kesulitan/permasalahan ini, yaitu namespace.
Lalu, apa itu namespace?
namespace dapat diibaratkan seperti wadah
atau grup yang digunakan untuk mengelompokkan fungsi atau data lainnya sehingga
menjadi dapat dibedakan. Misalkan jika kita ingin menggunakan fungsi cetak()
maka dengan namespace compiler akan tahu dengan pasti fungsi cetak() mana yang
dimaksudkan untuk dieksekusi. Dengan namespace juga kita tidak perlu menyiapkan
nama yang berbeda-beda seperti cetak1(), cetak2(), cetak3(),..., dll.
Bentuk
penulisan namespace:
namespace
<nama_namespace>
{
//blok kode
}
Bentuk
penulisan pemanggilan variabel/fungsi pada namespace:
<nama_namespace>::<nama_variabel/fungsi>;
Berikut
adalah contoh program penggunaan namespace c++ :
/*
C++ - namespace
Microsoft Visual Studio
Express 2012
[RS]
*/
#include <iostream>
#include <conio.h>
using namespace std;
//namespace info rumah
namespace info_rmh{
char warna[]= "Merah";
int jumlah = 3;
void info()
{
cout<<"Rumah berwarna "<<warna<<" itu
punya "<<jumlah<<" pintu."<<endl;
}
}
//namespace info mobil
namespace info_mbl{
char warna[]="Hitam";
int jumlah = 4;
void info()
{
cout<<"Mobil berwarna "<<warna<<" itu
punya "<<jumlah<<" pintu."<<endl;
}
}
int main()
{
cout<<"NAMESPACE"<<endl;
cout<<"---------"<<endl;
//memanggil variabel dan fungsi pada namespace info_rmh
cout<<"Warna
rumah : "<<info_rmh::warna<<endl;
cout<<"Jumlah
pintu : "<<info_rmh::jumlah<<endl;
info_rmh::info();
cout<<endl;
//memanggil variabel dan fungsi pada namespace info_mbl
cout<<"Warna
mobil : "<<info_mbl::warna<<endl;
cout<<"Jumlah
pintu : "<<info_mbl::jumlah<<endl;
info_mbl::info();
_getche();
return 0;
}
Output
NAMESPACE
---------
Warna rumah : Merah
Jumlah pintu : 3
Rumah berwarna Merah itu punya 3 pintu.
Warna mobil : Hitam
Jumlah pintu : 4
Mobil berwarna Hitam itu punya 4 pintu.
Penjelasan
Dengan
menggunakan namespace seperti program di atas, program tidak akan memunculkan
pesan error saat dicompile, seperti kode program sebelumnya. info_rmh:: digunakan untuk memanggil variabel/fungsi
yang didefinisikan pada namespace info_rmh, sedangkan info_mbl:: digunakan
untuk memanggil varibel/fungsi yang didefinisikan pada namespace info_mbl.
Menggunakan using
Kita dapat menggunakan using agar setiap
kali kita menggunakan suatu namespace kita tidak perlu menggunakan bentuk <nama_namespace>::<code>
setiap pemanggilan, hanya cukup sekali saja.
1. using <nama_namespace>::<code>;
Penggunaan
using di atas dimaksudkan jika kita ingin merujuk pada item/code tertentu dalam
suatu namespace.
Contoh program menggunakan
using untuk code tertentu dalam namespace :
/*
C++ - namespace
Microsoft Visual Studio
Express 2012
[RS]
*/
#include <iostream>
#include <conio.h>
using namespace std;
#define tampil cout
#define akhiribaris endl
//namespace
namespace nmsp{
int sp_x = 10;
int sp_y = 20;
int sp_z = 30;
}
using nmsp::sp_x;
using nmsp::sp_y;
int main()
{
cout<<"NAMESPACE"<<endl;
cout<<"---------"<<endl;
//menampilkan nilai variabel pada namespace nmsp
cout<<"Nilai sp_x : "<<sp_x<<endl;
cout<<"Nilai sp_y : "<<sp_y<<endl;
cout<<"Nilai sp_z : "<<nmsp::sp_z<<endl;
cout<<endl;
//asal
tampil<<"Hello wolrd!"<<akhiribaris;
_getche();
return 0;
}
2. using namespace <nama_namespace>;
Penggunaan using namespace di atas
dimaksudkan jika kita ingin merujuk pada semua item/code yang berada dalam
suatu namespace.
Contoh
program menggunakan using namespace :
/*
C++ - namespace
Microsoft Visual Studio
Express 2012
[RS]
*/
#include <iostream>
#include <conio.h>
using namespace std;
//namespace
namespace nmsp{
int sp_x = 10;
int sp_y = 20;
int sp_z = 30;
}
using namespace nmsp;
int main()
{
cout<<"NAMESPACE"<<endl;
cout<<"---------"<<endl;
//menampilkan nilai variabel pada namespace nmsp
cout<<"Nilai sp_x : "<<sp_x<<endl;
cout<<"Nilai sp_y : "<<sp_y<<endl;
cout<<"Nilai sp_z : "<<sp_z<<endl;
cout<<endl;
_getche();
return 0;
}
Output kedua program
di atas
NAMESPACE
---------
Nilai sp_x : 10
Nilai sp_y : 20
Nilai sp_z : 30
Penjelasan
Perhatikan penulisan program di atas, pada
program using 1, karena terdapat pernyataan using
nmsp::sp_x;using nmsp::sp_y; maka pemanggilan variabel
sp_x dan
sp_y pada
fungsi main tidak perlu diawalil dengan nama namespace terlebih dulu. Namun
tidak demikian dengan variabel sp_z.
Sedangkan pada program using 2, karena
terdapat pernyataan using namespace
nmsp; yang artinya merujuk pada semua item/kode pada namespace nmsp;, maka pemanggilan sp_x, sp_y, dan sp_z variabel pada fungsi main
tidak perlu diawali dengan nama namespace terlebih dulu.
Bagaimana
dengan using namespace std; ?
Variabel,
tipe, konstanta, dan fungsi pada standard library c++ dideklarasikan di dalam
namespace std, termasuk cout, cin, endl, dll. Jadi ketika kita ingin menggunakan
cout, cin, dan endl maka kita harus menggunakan namespace std seperti program
di bawah ini:
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char hi [15];
cout<<"Ketikkan string : ";
cin>>hi;
cout<<endl;
cout<<hi<<endl;
_getche();
return 0;
}
#include <iostream>
#include <conio.h>
int main()
{
char hi [15];
std::cout<<"Ketikkan string : ";
std::cin>>hi;
std::cout<<std::endl;
std::cout<<hi<<std::endl;
_getche();
return 0;
}
Output
kedua program di atas sama
Ketikkan string : Hello
Hello
Mungkin akan muncul pertanyaan seperti ini, “Jika cout, cin berada pada namespace std
lalu kenapa header iostream juga harus disertakan?”
Jawabnya :
Pada namespace std kurang lebih pendeklarasiannya seperti berikut.
Pada namespace std kurang lebih pendeklarasiannya seperti berikut.
namespace std
{
ostream cout;
istream cin;
//..
//..
};
Memang benar cout dan cin
berada pada namespace std, namun ostream dan istream
yang digunakan untuk metode input/output definisikan di dalam header <iostream>
sehingga tanpa header ini ostream dan istream
tidak akan dikenali oleh compiler. Jadi, untuk menggunakan cout dan cin
harus menyertakan keduanya yaitu, header iostream dan namespace std.
[RS]
Klik Like & Share jika postingan ini bermanfaat
Apa tanggapan Anda?
Berikan tanggapan Anda melalui kolom komentar yang telah disediakan.
- Gunakan bahasa yang sopan;
- Saat menjadikan postingan pada blog ini sebagai referensi, jangan lupa mencantumkan sumbernya (link dari blog ini).
Jika blog ini bermanfaat jangan lupa memberikan 'like' atau 'share' untuk mendapatkan update terbaru.
Terima kasih