Variabel Lokal dan Global

280 Direktorat Pembinaan SMK | 2008 void anotherFunction { int num = 20 ; variabel Local cout Dalam anotherFunction, num adalah: num endl; } Keluaran Program adalah sebagai berikut: Dalam program utatma,num adalah: 1 Dalam anotherFunction, num adalah: 20 Kembali dalam program utama, num masih 1 Meskipun terdapat dua variabel num, program ini hanya bisa melihat salah satu dari mereka setiap saat. Ketika program dijalankan dalam program utama, yang didefinisikan pada variabel num akan terlihat pada program utama. Ketika anotherFunction disebut sebagai variabel yang ditetapkan didalamnya akan terlihat, sehingga dalam variabel num program utama tersembunyi. Perhatikan program yang mengilustrasikan sifat tertutup dari dua fungsi, dimana bentuk kotak mewakili lingkup variabel Fungsi main Int num = 1; Variabel num hanya terlihat pada program utama Fungsi anotherFunction int num = 20; Variabel num hanya terlihat pada anotherFunction Gambar 7.10. Dua Fungsi yang mempunyai sifat tertutup, Sebuah Lokal variabel dapat dikatakan sebagai variable yang aman dan tersembunyi dari fungsi lain, tetapi variable ini tidak menyediakan cara yang mudah untuk berbagi data. Jika sejumlah besar data harus dapat diakses oleh semua fungsi dalam program, variabel global dapat digunakan sebagai alternatif mudah. Sebuah variabel global merupakan variabel yang ditetapkan diluar oleh semua fungsi dalam sebuah program. Program 7.16 menunjukkan dua buah fungsi utama dan anotherFunction, dimana menggunakan akses yang sama yaitu variabel global num. 2008 | Direktorat Pembinaan SMK 281 Program 7.16 include iostream using namespace std; void anotherFunction; Fungsi prototipe int num = 2 ; variabel Global int main { cout dalam program utama, num adalah num endl; anotherFunction; cout kembali dari program utama, num adalah num endl; return ; } void anotherFunction { cout dalam fungsi anotherFunction, num adalah num endl; num = 50 ; cout tetapi, sekarang telah diubah menjadi num endl; } Dalam Program 7.16 diatas, variabel num didefinisikan diluar semua fungsi. Karena muncul sebelum definisi pada program utama dan anotherFunction, maka keduanya memiliki akses ke fungsi tersebut. Program 7.17 include iostream using namespace std; int globalNum; variabel Global. Otomatis diatur ke null. int main { cout globalNum adalah globalNum endl; return ; } 282 Direktorat Pembinaan SMK | 2008 Jika sebuah fungsi memiliki variabel lokal dengan nama yang sama sebagai variabel global, variabel lokal hanya dapat dilihat oleh fungsi. Hal ini ditunjukkan oleh Program dibawah ini: Program 7.18 include iostream using namespace std; Funsi prototipe void texas; void arkansas; int cows = 10 ; variabel global int main { cout Disana banyak cows cows di program utama.\n ; texas; arkansas; cout Kembali dalam program utama, disana banyak cows cows.\n ; return ; } void texas { int cows = 100 ; variabel Local cout disana cows cows di texas.\n ; } void arkansas { int cows = 50 ; variabel Local cout There are cows cows in arkansas.\n ; } Ketika program diatas sedang menjalankan fungsi utama, variabel global cows akan terlihat. Dalam fungsi texas dan Arkansas, meskipun ada variabel lokal dengan nama cows. Variabel global tidak terlihat ketika program sedang menjalankan fungsi mereka. program dibawah merupakan program untuk mendaftar dan program ini menggunakan variabel global dan lokal. Fungsi ringUpSale menghitung dan menampilkan harga, pajak penjualan, dan subtotal untuk setiap item yang dibeli. Memiliki variabel lokal, pajak, yang memiliki nama yang sama 2008 | Direktorat Pembinaan SMK 283 seperti variabel global. Pajak pada ringUpSale variabel yang digunakan untuk menghitung pajak penjualan pada item, sementara global pajak variabel yang digunakan oleh program utama untuk menghitung total pajak penjualan pada pembelian. Supaya lebih jelas, perhatikan program dibawah ini: Program 7.19 include iostream include iomanip using namespace std; Fungsi prototipe void ringUpSale; variabel Global const double TAX_RATE = 0.06 ; double tax, sale, total; int main { char again; cout fixed showpoint setprecision 2 ; do { ringUpSale; cout Apakah disana ada ada sesuatu yang dapat dijual? ; cin again; } while again == y || again == Y; tax = sale TAX_RATE; total = sale + tax; cout \nPajak penjualannya adalah tax endl; cout Total Pembayaran adalah total endl; return ; } void ringUpSale { Variabel Local int qty; double unitPrice, tax, thisSale, subTotal; cout \nJumlah: ; 284 Direktorat Pembinaan SMK | 2008 cin qty; cout Harga per satuan: ; cin unitPrice; thisSale = qty unitPrice; total harga unit sale += thisSale; Update variabel global penjualan tax = thisSale TAX_RATE; pembayaran pajak untuk item subTotal = thisSale + tax; subtotal untuk tiap item cout harga untuk tiap item: thisSale endl; cout pajak untuk tiap item: tax endl; cout SubTotal untuk tiap item: subTotal endl; }

7.12. Variabel Static Local

Jika suatu fungsi dipanggil lebih dari satu kali dalam sebuah program, maka nilai yang disimpan dalam fungsi sebagai variabel lokal tidak akan kuat menahan panggilan fungsi. Hal ini disebabkan karena variabel- variabel yang hancur ketika fungsi diakhiri dan kemudian kembali dibuat bila fungsi sudah dimulai lagi. Hal ini ditunjukkan dalam Program 7.20 dibawah ini: . Program 7.20 include iostream using namespace std; Fungsi prototipe void showLocal; int main { showLocal; showLocal; return ; } void showLocal { int localNum = 5 ; variabel Local cout localNum adalaj localNum endl; localNum = 99 ; 2008 | Direktorat Pembinaan SMK 285 } Keluaran Program adalah sebagai berikut: localNum is 5 localNum is 5 Walaupun pernyataan terakhir dalam fungsi showLocal took 99 pada localNum, variabel yang hancur bila fungsi kembali. Pada saat fungsi tersebut dipanggil, localNum akan recreated dan diinisialisasi ke 5 lagi. Kadang-kadang keinginan untuk sebuah program untuk mengingat adalah nilai yang disimpan dalam variabel lokal antara fungsi panggilan. Hal ini dapat dicapai dengan membuat variabel statis. variabel Static adalah variable lokal yang tidak hancur bila fungsi kembali. Mereka ada untuk seluruh masa program, walaupun mereka hanya lingkup fungsi mereka yang ditetapkan. Program 7.21 menunjukkan beberapa karakteristik statik lokal variabel. Program 7.21 include iostream using namespace std; Fungsi prototipe void showStatic; int main { for int count = ; count 5 ; count++ showStatic; return ; } void showStatic { static int statNum; Static local variable cout statNum adalah statNum endl; statNum++; } Program diatas terdapat variabel statNum adalah di tambahkan dengan satu incremented pada fungsi showStatic, dan tetap dengan nilai antara setiap panggilan fungsi. Perhatikan bahwa walaupun tidak