Pengertian dan Fungsi Function Overloading

Posted on   Maret 2, 2018   |   Last Modified   Maret 2, 2018
Function Overloading

Pengertian Function overloading

Function overloading adalah salah satu fitur C/C++ yang memungkinkan kita untuk mendirikan dua atau lebih function dengan identitas yang sama selama mereka memiliki keunikan pada function parameter.

Pada artikel sebelumnya penulis pernah mengatakan bahwa, kita tidak dimungkinkan untuk mendirikan sebuah identitas dengan identitas(nama variabel, object, class, dan lain-lain) yang sama dengan yang sudah ada sebelumnya. Tapi aturan tersebut tidak sepenuhnya berlaku pada function.

Pada function kita dimungkinkan untuk mendirikan function lebih dari satu dengan identitas yang sama, selama masing-masing function tersebut memiliki perbedaan pada function parameter. Hal tersebut disebut sebagai fitur Overloading.

Fungsi dari Function Overloading

Overloading berfungsi untuk membuat fleksibilitas saat penggunaan function. sebelumnya diberitahukan bahwa ketika kita memberikan argument, kita harus mengikuti aturan yang telah ditetapkan oleh function parameter ( kita harus memberikan argument dengan menyesuaikan tipe data dan urutan dari function parameter ).

function yang memiliki fitur overloading, memberikan kemudahan dengan kemungkinkan untuk memberikan argument secara fleksibel sesuai keadaan dan kebutuhkan.

Contoh program

#include <iostream>
#include <string>
using namespace std;

void cetak(double x);
void cetak(string x);

int main(){
    cetak(9.2);
    cetak("belajarcpp.com");
    cetak(1);
    cetak("C/C++");
    return 0;
}

void cetak(double x){
    cout<<"double x = "<<x<<endl;
}

void cetak(string x){
    cout<<"string x = "<<x<<endl;
}

Pada contoh di atas kita diperlihatkan bagaimana dimudahkan kita dalam menggunakan function kustom cetak(). Pada contoh di atas kita hanya memanggil satu identitas dari function, dengan otomatis CPU akan mengerti function mana yang tepat untuk mendapatkan argument tersebut.

Hal ini sangat berguna untuk membuat sebuah function yang dapat berbuat banyak hal, dengan argument yang fleksibel.

Contoh Program

#include <iostream>
using namespace std;

int perkalian(int x, int y);
double perkalian(double a, double b);
double perkalian(double a, double b, double c);

int main(){
    cout<<perkalian(1.23, 3.9)<<endl;
    cout<<perkalian(33, 25)<<endl;
    cout<<perkalian(7.54, 4.98, 3.21)<<endl;
    return 0;
}

int perkalian(int x, int y){
    cout<<"perkalian(int x, int y)"<<endl;
    return x*y;
}
double perkalian(double a, double b){
    cout<<"perkalian(double a, double b)"<<endl;
    return a*b;
}
double perkalian(double a, double b, double c){
    cout<<"perkalian(double a, double b, double c)"<<endl;
    return a*b*c;
}

Keunikan dari function parameter bukan hanya pada tipe data-nya saja yang digunakan pada suatu function parameter. Melainkan kita juga bisa mendirikan berbagai macam function dengan jumlah parameter yang berbeda-beda, dan kita juga bisa membuat function parameter mereka benar-benar berbeda satu sama lain.

Proses Pencocokan oleh CPU

Pembuatan function overloading wajib untuk membuat function tersebut benar-benar berbeda dalam segi function parameter. Jika diidentifikasi memiliki kesamaan, maka kompilator akan mengeluh mengenai “ambiguating”.

double perkalian(double a);
void perkalian(double a);

Kadang kompilator juga akan mengeluh saat dimana memang tidak ditemukan kecocokan function dengan argument pada pemanggilan function.

Saat program kita mencoba menggunakan function, apa yang akan dilakukan CPU adalah mencari function dengan identitas tersebut dan memeriksa kecocokan argument yang diberikan dengan function parameter.

Proses pencocokan yang dilakukan CPU terdapat 4 tahap, yaitu :

  1. Mencari function dengan function parameter yang benar-benar paling cocok dengan argument pada pemanggilan function.
    Contoh program :

    #include <iostream>
    using namespace std;
    
    void cetak(int a);
    void cetak(const char *a);
    
    int main(){
        cetak(2);
        return 0;
    }
    
    void cetak(int a){
        cout<<"int a = "<<a<<endl;
    }
    void cetak(const char *a){
        cout<<"char *a = "<<a<<endl;
    }

    Pada contoh di atas akan menampilkan hasil program yang menampilkan keluaran int a 2, karena CPU menemukan function yang paling tepat, yaitu void cetak(int a) untuk pemanggilan function kustom cetak(2).

  2. Jika tidak ditemukan kecocokan maka akan mencari menggunakan metode Promotion. Dalam C/C++ terdapat istilah promotion untuk melakukan konversi dari tipe tertentu ke tipe lain, konversi tersebut sudah di standarkan oleh C/C++ sendiri. Seperti unsigned short di promosikan menjadi integer, float menjadi double, double menjadi integer, enum menjadi integer dan char ke int.
  3. Jika masih belum ditemukan maka akan mencari menggunakan metode Standard Conversion, seperti pointer akan cocok dengan void pointer, semua numerik akan cocok dengan tipe numerik satu sama lain, emum dengan numerik dan 0 dengan pointer atau type numerik.
  4. dan tahap terakhir menggunakan user-defined conversion.

Jika semua pencocokan itu gagal maka kompilator akan mengeluh mengenai “function tidak ditemukan”.


Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *