Senin, 08 Agustus 2011

OOP #4: Pass By Value

Gimana, mudah kan ngompile pake command line di OOP #3. Ayo lanjutkan penjelajahan baris-baris kode C++. Kali ini kita ngebahas "Pass By Value"

Diasumsikan kita sudah punya direktorti c:\oop. Ketik source code berikut ini (nomor baris hanya untuk referensi, jangan diketik) dan disimpan menjadi c:\oop\oop4.cpp yang akan di-compile menjadi oop4.exe.

Source code:


  1. #include <stdio.h>

  2. int main(int argc, char* argv[]) {

  3. int a, b;

  4. printf("address a: %X, b: %X, nilai a: %X, b:%X\n", &a, &b, a, b);

  5. a=8;

  6. b=a;

  7. printf("address a: %X, b: %X, nilai a: %X, b:%X\n", &a, &b, a, b);

  8. a=4;

  9. printf("address a: %X, b: %X, nilai a: %X, b:%X\n", &a, &b, a, b);

  10. return 0;

  11. }


Diasumsikan kita sudah berada dalam direktori c:\oop. Build menjadi oop4.exe dengan mengetik command line: g++ -o oop4.exe oop4.cpp

Output Program:

Jika kompilasi berhasil, berikut ini adalah hasil eksekusi oop4.exe (nomor baris saya selipkan untuk referensi):


  1. address a: 22FF4C, b: 22FF48, nilai a: 7FFDC000, b:0

  2. address a: 22FF4C, b: 22FF48, nilai a: 8, b:8

  3. address a: 22FF4C, b: 22FF48, nilai a: 4, b:8


Pembahasan Source Code:

Setiap variabel menempati memori. Jadi, variabel memiliki 2 hal: alamat memori dan nilai. Kita memeriksa keduanya dalam latihan kali ini.


  1. Baris 1: Meng-include stdio.h yang berisi deklarasi function printf (Dalam OOP #3 sudah dibahas tentang hal ini).

  2. Baris 2: function main adalah entry-point program.

  3. Baris 3: mendeklarasikan dua varibel (a dan b) bertipe integer (bilangan bulat).

  4. Baris 4: memeriksa alamat dan nilai a dan b. Lihat Output Program, baris 1. Variabel a sudah memiliki alokasi memori: 22FF4C dan b: 22FF48 (kode &a dan &b masing-masing berarti mengevaluasi alamat a dan b). Variabel b yang dideklarasikan setelah a memperoleh alamat memori yang lebih awal (22FF48 lebih awal daripada 22FF4C). Ini adalah efek penyimpanan variabel dalam stack segment. (Tentang alokasi stack vs heap dijelaskan di bab berikutnya). Kita belum meng-assign nilai a dan b sehingga masih acak (a: 7FFDC000 dan b: 0).


  5. Baris 5: a diberi nilai 8.

  6. Baris 6: nilai a disalin ke b secara pass by value.

  7. Baris 7: memeriksa alamat dan nilai a dan b. Lihat Output Program, baris 2. Alamat a dan b tidak berubah. Nilai a sama dengan nilai b, yaitu 8. Ini akibat penyalinan nilai a ke b (source code, baris 6).

  8. Baris 8: nilai a diubah menjadi 4. Apakah b juga berubah?

  9. Baris 9: Memeriksa alamat dan nilai a dan b. Lihat Output Program baris 3. Alamat a dan b tidak berubah. Nilai a berubah menjadi 4. Dan b? Tetap 8. a dan b adalah 2 variabel independen. Pass by value hanya menyalin nilai suatu variabel ke variabel lain. Seperti halnya setelah kita mem-fotokopi selembar kertas. Kalau kita mencoret-coret kertas asli, tidak akan berakibat apa-apa ke kertas copy-annya.

  10. Baris 10: memberi tahu sistem operasi kalo fungsi main selesai tanpa error.


Pass by value:

  • Hanya nilai yang disalin antar dua variabel, alamat keduanya tetap.

  • Perubahan variabel pertama tidak akan mengubah variabel kedua. Demikian pula sebaliknya.

Tidak ada komentar:

Posting Komentar

RePLu On Facebook