Pada artikel sebelumnya pernah dijelaskan mengenai function overloading, dimana kita dimungkinkan untuk membuat fleksibilitas function tepatnya saat kita mencoba membuat function tersebut yang dapat menyesuaikan dengan tipe data yang akan digunakan. Tapi kenyataanya, cara tersebut akan menyulitkan anda untuk melakukan pemeliharaan
Penjelasan Template
Templates adalah salah satu fitur dari C++ yang memungkinkan anda untuk membuat sebuah program generik. Dengan arti lain bahwa anda dimungkinkan untuk membuat sebuah function atau class yang dapat menyesuaikan dan bekerja dengan tipe data yang berbeda.
Dengan adanya template kita dimungkinkan membuat sebuah kode yang dapat digunakan berulangkali dan bersifat fleksibel dengan berbagai macam tipe data. Dan juga mempermudahkan kita dalam melakukan perawatan kode.
Bentuk Penulisan:
template <typename T> //atau template <class T> //Keduanya secara garis besar sama
Bagaimana CPU bekerja pada Template
Saat waktu kompilasi kode program, kompiler akan memeriksa tipe data dan melakukan peluasan, hasil dari kompilasi akan menghasilkan banyak salinan dari sebuah kode function/class dengan perbedaan dalam tipe data yang digunakan. Singkatnya kompiler akan membuat function/class overloading dari template yang telah dibuat oleh programmer. peluasan dilakukan hanya sebatas tipe data yang dibutuhkan atau disebutkan.
Function Template
Saat sebuah template digunakan pada function, hal itu akan memberikan kemampuan ke pada function untuk dapat menyesuaikan dengan berbagai tipe data yang dimaksud.
Contoh Penulisan:
template <typename T>
T namaFunction(T parameter){
//
}
Contoh program:
#include <iostream>
using namespace std;
template <typename T> //Template dengan identitas T
T tambah(T x, T y) //Function dengan return type 'template T' dan parameter 'template T'
{
return x+y;
}
int main()
{
cout << tambah<int>(5, 8) << endl; // memanggil function tambah dengan integer
cout << tambah<double>(6.3, 9.1) << endl; // memanggil function tambah dengan double
cout << tambah<string>("hallo ", "semua") << endl; // memanggil function tambah dengan string
return 0;
}
Class Template
Sama seperti function, dimana class akan dapat menyesuaikan banyak tipe data, satu class yang sama dapat digunakan untuk semua tipe data.
Contoh Penulisan
template <class T>
class nama_kelas{
//
public:
T contohVariabel;
T contohFunction(T parameter);
//
}
Contoh Program
#include <iostream>
using namespace std;
template <class T>
class Larik {
private:
T *ptr; //anggota variabel dengan template
int size;
public:
Larik(T arr[], int s); //anggota function dengan template
void print();
};
template <class T>
Larik<T>::Larik(T arr[], int s) {//definisi function pada
ptr = new T[s]; //memori baru
size = s;
for(int i = 0; i < size; i++) //memasukan array
ptr[i] = arr[i];
}
template <class T>
void Larik<T>::print() {
for (int i = 0; i < size; i++)
cout<<" "<<*(ptr + i);
cout<<endl;
}
int main() {
int arr[5] = {1, 2, 3, 4, 5}; //array
Larik<int> a(arr, 5); //memanggil function dengan array integer
a.print(); //cetak
return 0;
}
Default Template
Seperti halnya sebuah parameter, dalam template kita juga dimungkinkan untuk membuat sebuah default template atau template yang secara default sudah memiliki nilai.
Contoh Penulisan
template<class T, class U = integer>
Template memiliki lebih argumen
Dalam mendirikan template kita juga dimungkinkan untuk mendirikan template lebih dari satu.
Contoh Penulisan
template<class T, class u>
class A{
//
}
Contoh Pemanggilan
A<string, double> a;