Thursday, November 15, 2007

Method Overloading

Method overloading digunakan untuk membuat beberapa fungsi (method) dengan nama yang SAMA dan mengerjakan tugas yang MIRIP. Tujuannya, agar programmer tidak kesulitan dalam mengingat sebuah fungsi yang tugasnya mirip. Misalnya untuk membuat fungsi perkalian. Ada perkalian yang membutuhkan dua argumen dan ada perkalian yang membutuhkan tiga argumen (tugasnya mirip, yaitu sama-sama mengalikan argumen, hanya jumlah argumen yang berbeda). Kalau dibuat fungsi dengan nama yang berbeda, kemungkinan programmer akan repot. Contoh, untuk fungsi perkalian dengan dua argumen, namanya adalah kali1(bil1, bil2). Sedangkan untuk perkalian dengan tiga argumen namanya adalah kali2(bil1, bil2, bil3). Repot kan? Gimana kalo ada sepuluh perkalian? Bandingkan bila namanya kali(bil1, bil2) dan kali(bil1, bil2, bil3). Kita cuma perlu mengingat jumlah argumen dari fungsi kali.

So, gimana cara compiler C++ membedakan method tersebut, padahal namanya sama? Compiler C++ memilih fungsi dengan mengamati jumlah, tipe data dan urutan argumen. Nah, dari sini jelas bahwa compiler menggunakan daftar parameter untuk membedakan fungsi dengan nama yang sama. Bukan membedakan dengan return type-nya (nilai balik).

Sehingga, untuk membuat method overloading diperlukan setidaknya satu dari tiga syarat di bawah ini:
  • mempunyai jumlah argumen berbeda.
  • mempunyai tipe data argumen yang berbeda.
  • mempunyai urutan argumen yang berbeda.

Contoh #1 (jumlah argumen berbeda):

// method kali dengan dua argumen (bil1 dan bil2)
int kali(int bil1, int bil2) {
return bil1*bil2
}

// method kali dengan tiga argumen (bil1, bil2 dan bil3)
int kali(int bil1, int bil2, int bil3) {

return bil1*bil2*bil3;
}

Method kali pada contoh di atas VALID karena mempunyai jumlah argumen yang berbeda.


Contoh #2 (mempunyai tipe data argumen yang berbeda):

// method tampilkanNilai mempunyai argumen bertipe char
void tampilkanNilai(char nilai) {
cout << "Nilai (dalam huruf): " << nilai;
}

// method tampilkanNilai mempunyai argumen bertipe int
void tampilkanNilai(int nilai) {
cout << "Nilai (dalam angka): " << nilai;
}

Contoh method tampilkanNilai diatas VALID karena mempunyai tipe data argumen yang berbeda walaupun memiliki jumlah argumen yang sama.


Contoh #3 (urutan argumen berbeda):

// method kali dengan tipe data bil1 adalah int
// dan bil2 adalah double
double kali(int bil1, double bil2) {
return bil1*bil2;
}

// method kali dengan tipe data bil1 adalah double
// dan bil2 adalah int
double kali(double bil1, int bil2) {
return bil1*bil2;
}

Method kali di atas VALID karena urutan argumen berbeda. Pada method kali yang pertama bil1 bertipe data int kemudian diikuti oleh bil2 dengan tipe data double. Sedangkan pada method kali yang kedua, bil1 bertipe data double diikuti oleh bil2 yang bertipe data int.


PERLU DIINGAT!!!
Seringnya programmer melakukan kesalahan ketika membuat method overloading adalah dengan membuat daftar parameter yang sama dengan return type (nilai balik) yang berbeda. Hal ini menghasilkan SYNTAX ERROR.

Contoh yang salah:

// return type: int
int hitungUmur(int umur)
{
return umur + 2;
}

// return type: void
void hitungUmur(int umur)
{
cout<<"umur siswa setelah lulus kuliah= "<<umur+2;
}

SYNTAX ERROR. Method tidak dapat di-overload karena mempunyai jumlah argumen yang sama dengan tipe data yang sama.


Semoga bermanfaat... :)

No comments: