Overloading dan Template

Dalam bahasa C++, kita bisa juga membuat dua method atau function dengan jumlah parameter yang berbeda walaupun namanya sama. Penentuan mana yang akan dipanggil didasarkan pada kesesuaian parameter saat pemanggilan function.

Pembuatan dua method atau function dengan nama yang sama tapi parameternya berbeda disebut sebagai overloading.

Overloading Function

Satu kode program bisa punya beberapa function yang sama. Saat pemanggilan, function yang dipanggil ditentukan berdasarkan kesamaan parameter dan argumen.
#include <iostream>

using namespace std;

void functionku(int x){
	cout << endl << "1 parameter" << endl;
	cout << "parameter : " << x << endl;
}

void functionku(int x, int y){
	cout << endl << "2 parameter(tipenya sama)" << endl;
	cout << "parameter x : " << x << endl;
	cout << "parameter y : " << y << endl;
}

void functionku(int x, string s){
	cout << endl << "2 parameter (beda tipe)" << endl;
	cout << "parameter : " << x << endl;
	cout << "parameter : " << s << endl;
}

int main(){
    functionku(2);
    functionku(2, 3);
    
    functionku(2, "string");
    
    return 0;
}
Output :
1 parameter
parameter : 2

2 parameter(tipenya sama)
parameter x : 2
parameter y : 3

2 parameter (beda tipe)
parameter : 2
parameter : string

Contoh di atas memiliki 3 function bernama functionku, dan parameternya berbeda. Pemanggilan function juga dilakukan sebanyak 3 kali. Pemanggilan pertama yang menggunakan satu argumen, memanggil function dengan satu parameter.

Karena ada dua function yang namanya sekaligus jumlah parameternya sama, pemanggilan function dengan 2 parameter pada contoh di atas ditentukan berdasarkan kecocokan tipe datanya secara berurutan.

Overloading Method

Satu class bisa punya dua method yang sama. Syaratnya, parameternya harus punya tipe data yang berbeda. Kalau jumlah parameternya sama, urutan tipe data parameternya harus berbeda.

#include <iostream>

class kwoordinat{
    public:
    kwoordinat(){
        x=2; y=3;
    }
    int x, y;
    int tulis_koordinat(){
        std::cout << "koordinat : " << x << "," << y << std::endl;
        return 0;
    }

    int ubah_koordinat(int tx){
        x=tx;
        return 0;
    }

    int ubah_koordinat(int tx, int ty){
        x=tx;
        y=ty;
        return 0;
    }
};

kwoordinat koordinat2d;

int main(){
    koordinat2d.ubah_koordinat(1);
    koordinat2d.tulis_koordinat();

    koordinat2d.ubah_koordinat(3, 4);
    koordinat2d.tulis_koordinat();

    return 0;
}
Output :
koordinat : 1,3
koordinat : 3,4

Pada contoh di atas, kita punya dua method dengan nama ubah_koordinat pada kelas kwoordinat dengan parameter yang berbeda. Method yang namanya sama tersebut dipanggil dengan argumen yang jumlahnya berbeda. 

Method dengan satu argumen akan memanggil method dengan satu parameter. Method yang memakai dua argumen akan memanggil method dengan dua parameter. Aturannya sama dengan function overloading.

Template

Jika function punya jumlah parameter dan isi yang sama, kalian mungkin tidak akan perlu function overloading. Kalian mungkin lebih perlu template. Template memungkinkan kita untuk menulis function dengan tipe data parameter yang berbeda-beda, terutama untuk tipe data yang berupa angka. Kalian juga bisa menggunakannya untuk class jika memang diperlukan. Sintaks penulisan template adalah sebagai berikut.

  • Template <typename T>
  • Template <class T>
Contoh :
#include <iostream>

using namespace std;

template<typename T>

void fungsiku(T isi){
    cout << isi << endl;
}

int main(){
    fungsiku(8);
    fungsiku(8.9);
    fungsiku("terserah");

    return 0;
}
Output :
8
8.9
terserah

Template tidak benar-benar menggantikan function overloading. Jika function dengan nama yang sama isinya berbeda, kalian tetap akan butuh function overloading.