Matakuliah Tahun Versi : T0044/Pemrograman Berorientasi Obyek : 2005 : 1.0 Pertemuan 12 Template 1 Learning Outcomes Pada akhir pertemuan ini, diharapkan mahasiswa akan mampu : • Menghasilkan Program C++ dengan menggunakan Template 2 Outline Materi • Definisi Template & STL • Function template • Class template 3 Definisi Template & STL • Template atau "generic" / “tipe data berparamete" • membuat function / class yang berhubungan. • Untuk operasi fungsi yang sama namun beda tipe argumen • Berbeda dengan overloading yg menulis kembali code • Template digunakan jika kita menulis banyak code yang identik. 4 Definisi Template & STL • Pengembangan baru dlm C++ adalah adopsi Standard Template Library (STL). • Kebanyakan compiler vendors menawarkan STL sbg bagian dari compiler mereka. • STL adalah library berbasis template berisi class-calss seperti vectors, lists, queues, dan stacks. • STL juga berisi algoritma umum seperti sorting dan searching. • Tujuan STL adalah memberikan alternatif utk “reinventing the wheel” utk kebutuhan umum. • STL di-test dan di-debug, dengan kinerja tinggi. • Hal penting adalah STL mempunyai kemampuan reusable; jika kita sudah mengerti cara pakai sebuah STL container, kita dpt menggunakannnya di berbagai aplikasi program kitatanpa hrs membuat baru. 5 Function Template • Misal: function max(x,y) me-return bilangan terbesar dari 2 arguments x dan y. • X dan y dapat ber- type apa saja tergantung bilangannya. • Karena C++ merupakan jenis bahasa pemrograman yang ketat dalam hal tipe data, maka diperlukan deklarasi tipe parameter x dan y saat compile time. • Jika tanpa menggunakan template, harus dibuat banyak versi overloaded fungsi max() (sebanyak data type yg di support), begitu juga code untuk tiap versi-nya. 6 Function Template • Dengan menggunakan template, dapat di definisikan sebuah bentuk fungsi yg berhubungan dg overloaded functions dg membiarkan tipe data parameter: template <class T> T max(T x, T y) { return (x > y) ? x : y; }; • Tipe data diwakili oleh template argument <class T>. 7 Function Template • Pada saat template dijalankan, compiler men-generate function yg sesuai dg tipe data fungsi pemanggil-nya (calling fuction): int i; Myclass a, b; int j = max(i,0); Myclass m = max(a,b); // tipe argument: integers // tipe arguments: Myclass • Semua tipe data (tidak hanya class) dapat dipakai <class T>. • Compiler akan menangani calling operator >( ) yang sesuai, sehingga kita dapat menggunakan fungsi max dengan tipe argument apapun. 8 Class Templates • Disebut juga generic class atau class generator • Untuk men-definisikan model class. • Generic container classes – Kita dpt memiliki tipe data integer atau lainnya, dg basic operations yg sama (insert, delete, index, etc.) – Hanya dengan men-definisikan struktur class dengan generic operation, dan system akan men-generate definisi class on the fly. 9 Program – Class Templates #1 template <class T> class List { T *v; int size; public: List(int); T& operator[](int i) {return v[i];} }; // definisi dengan syntax khusus: template <class T> List<T>::List(int n) { v = new T[n]; size = n; } Void main() { List<int> x(10); List<Myclass> y(20); x[3] = 7; y[3] = m; } Int value Object Of Myclass 10 Program – Class Templates #2 #include <iostream.h> template <class T1, class T2> class MyTemp { T1 t1; T2 t2; public: MyTemp(T1 tt1, T2 tt2) { t1 = tt1; t2 = tt2; } void display() { cout << t1 << ' ' << t2 << '\n'; } }; Void main() { int a = 123; double b = 456.789; MyTemp<int, double> mt(a, b); mt.display(); } 11 Kasus Array dengan Template void main() { int array[10]; for (int i = 0; i <= 10; i++) array[i] = 123; } • Bug pada program ini adalah akses ke elemen array out of range (walaupun posisi memory yg terisi kemungkinan tepat di sebelahnya) 12 Kasus Array dengan Template assert () adl sebuah function dg return True/False utk meng-evaluate sebuah ekspresi #include <assert.h> Template <class T, int b> class Array { T elemen[b]; public: T& operator[] (int sub) { assert(sub >=0 && sub < b); return elemen[sub]; } }; Template dapat digunakan untuk menambah batas array. 13 Latihan – Program dg Template void main() { const int aCount = 5; const int bCount = 7; const int cCount = 6; int a [aCount] = { 1, 2, 3, 4, 5 }; double b[bCount] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 }; char c[cCount] = "HELLO"; cout << "Array a contains:" << endl; printArray( a, aCount ); cout << "Array b contains:" << endl; printArray( b, bCount ); cout << "Array c contains:" << endl; printArray( c, cCount ); } • • Buatlah deklarasi class template “Array”. Constructor mengcreate array dgn new seperti pada main function disamping Output: Array a 1 2 3 4 Array b 1.1 2.2 Array c H E L L contains: 5 contains: 3.3 4.4 5.5 6.6 7.7 contains: O 14 Tugas 12 • Tugas 12A: Mahasiswa membuat ringkasan dari artikel tentang Template dalam C++ • Tugas 12B: Mahasiswa mencari Output Program dengan Template • Tugas 12C: Mahasiswa membuat program dengan function template & class templete 15
© Copyright 2024 Paperzz