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;
}
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;
}
// 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;
}
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:
Post a Comment