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;