12 Januari, 2010

Function Template


Pertama - tama mari kita membahas tentang function template.Untuk itu marilah kita perhatikan contoh berikut.

template <class tipe>
void swap(tipe &a,tipe &b)
{
tipe c;
c = a;
a = b;
b = c;
}

Pada contoh diatas terdapat sebuah fungsi swap (menukar 2 buah variable) menggunakan template.. Untuk pemanggilan fungsi dilakukan seperti pemanggilan fungsi tanpa template. Untuk itu mari perhatikan penggalan perintah untuk menggunakan fungsi swap.

Contoh template dengan instance tipe int

void main(void)
{
int a,b;
a = 10;
b = 20;
swap(a,b); cout << a << “ “ << b << endl;
}

Contoh template dengan instance tipe float
void main(void)
{
float a,b;
a = 10.0;
b = 20.0;
swap(a,b); cout << a << “ “ << b << endl;
}

Contoh template dengan instance struct tTes
struct tTes
{
int a,b;
};
void main(void)
{
tTes a,b;
a.a = 10;
a.b = 20;
b.a = 30;
b.b = 40;
swap(a,b);
cout << a.a << " " << a.b << " " << b.a << " " << b.b;
}

Dapat dilihat , dengan menggunakan template kita telah menghemat waktu untuk menulis fungsi Pada fungsi swap diatas , juga tidak menutup kemungkinan untuk menukar 2 buah kelas.
Pada contoh diatas fungsi tidak akan bekerja jika variable yang ditukar berbeda tipe . Walaupun kekerabatannya cukup dekat . Anda tidak bisa menukar tipe int (16bit) dengan tipe short (16 bit). Ini terkait dengan pendeklarasian template pada fungsi swap.

template <class tipe>
void swap(tipe &a,tipe &b)

Pada pendeklarasian fungsi swap dapat dilihat bahwa formal parameter a sama dengan formal parameter b . Oleh sebab itu sudah seharusnya tipe pada actual parameter pun harus sama. Untuk contoh fungsi swap diatas sebaiknya anda tidak menggunakan type-casting untuk mengatasi masalah diatas. Mengingat fungsi swap diatas dikirim by reference . (Yang mana dalam pengiriman fungsi menggunakan reference berkaitan dengan pointer). Tentu saja ukuran dari variable menjadi sangat penting karena kita telah merubah ukuran dari variable (type casting) bisa saja terjadi hasil yang tak terduga . Walupun kadang – kadang memberikan hasil yang benar. Kecuali jika ukuran kedua tipe variable tersebut benar - benar sama , anda dapat menggunakan type–casting dalam hal ini.
Untuk mendefiniskan lebih dari satu type pada template anda dapat menggnakan koma sebagai pemisah
contoh :
Template dengan 2 buah tipe
template <class tipe1,class tipe2>

0 komentar:

Posting Komentar