download

Matakuliah
Tahun
: T0456 / Algoritma dan Metode Object
Oriented Programming
: 2007
Generic Data Type
Pertemuan 25
Learning Outcomes
Pada akhir pertemuan ini, diharapkan:
Mahasiswa dapat menguraikan konsep generic data type pada class
dan function.
Buku Referensi:
C++ - How to program, Deitel & Deitel,
Prentice Hall, 2001.
Websites:
http://www.deitel.com
3
Bina Nusantara
Outline Materi
•
•
•
•
•
Pengertian Generic data type
Manfaat template
Fungsi Template
Class Template
Contoh program template
4
Bina Nusantara
Template
C++ mendukung penggunaan kembali kode program
dengan berbagai cara, seperti inheritance, composition
(nested object) merupakan metode penggunaan kembali
kode object.
Template merupakan fasilitas C++ yang mendukung
penggunaan kembali kode program.
Bina Nusantara
Template
Template dapat diartikan sebagai blanko merupakan teknik
membuat tipe data yang berupa parameter, artinya tipe data
tersebut dapat berubah-ubah tergantung parameter yang
diberikan pada saat inisialisasi.
Contoh pada dunia nyata:
cetakan patung logam -> gips, lilin
Gunting -> benang, kertas
Bina Nusantara
Template Fungsi
Dengan overloading terhadap fungsi dapat diciptakan
beberapa fungsi dengan nama sama yang menangani
proses dengan tipe data yang berlainan.
Contoh fungsi tukar bilangan bulat:
void Tukar(int &x, int &y) {
int temp = x;
x = y;
y = temp;
}
Bina Nusantara
Template Fungsi
•
Untuk menukar bilangan real perlu Menuliskan:
void Tukar(double &x, double &y){
double temp = x;
x = y;
y = temp;
}
•
Demikian juga jika diinginkan untuk menukar karakter atau
data lainnya, maka harus dituliskan kembali definisi dari
fungsi tukar tsb.
Bina Nusantara
Template Fungsi
Kekurangan overloading adalah kode dari sejumlah
fungsi dengan nama yang sama tersebut harus
dituliskan.
Dengan template, hal tersebut tidak perlu dilakukan,
sehingga program menjadi lebih sederhana.
Template fungsi sangat bermanfaat untuk fungsi-fungsi
yang menangani tugas yang sama dan hanya berbeda
pada tipe data.
Bina Nusantara
Contoh
template <class T> void Swap (T &x, T &y) {
T temp = x;
x = y;
y = temp;
}
Bina Nusantara
•
•
•
•
Bina Nusantara
Kata kunci template memberitahukan pada compiler
bahwa pernyataan setelah kata ini merupakan template.
Sesudah kata class dalam tanda < > terdapat pengenal
T, yang digunakan sebagai penganti tipe data.
Pengenal T ini biasa disebut sebagai template
argument.
Pengenal T tidak harus berupa karakter tunggal dan
biasanya dituliskan dengan huruf besar.
Contoh Program Tempalte Function
// Contoh program c++ dengan fungsi template
#include <iostream.h>
template <class T>
void Swap (T &x, T &y) {
T temp = x;
x = y;
y = temp;
}
void main() {
double x = 4.50, y = 7.54;
cout << "X = " << x << " Y = " << y << endl;
Swap( x, y);
cout << "X = " << x << " Y = " << y << endl;
int p = 25, q = 10;
cout << "P = " << p << " Q = " << q << endl;
Swap( p, q);
cout << "P = " << p << " Q = " << q << endl;
}
Bina Nusantara
Template fungsi dengan argument lebih dari satu
Template argumen bisa lebih dari satu jika menggunakan
tipe data lebih dari satu
Template yang menggunakan lebih dari satu tipe data
dapat didefinisikan dengan menuliskannya pada tanda < >.
Misalkan:
template <class A, class B>
Bina Nusantara
// Contoh fungsi GTSum
int GTSum(int *Data, long x, int size) {
long sum = 0;
for (int i=0; i < size; i++)
sum += Data[i];
return ((sum > x) ? 1 : 0);
}
int GTSum(float *Data, double x, int size) {
double sum = 0;
for (int i=0; i < size; i++)
sum += Data[i];
return ((sum > x) ? 1 : 0);
}
Bina Nusantara
// Dapat ditulis dengan template:
template <class A, class B>
int GTSum(A *Data, B x, int size) {
B sum = 0;
for (int i=0; i < size; i++)
sum += Data[i];
return ((sum > x) ? 1 : 0);
}
Bina Nusantara
// contoh program dengan template lebih dari satu tipe
#include <iostream.h>
template <class A, class B>
int GTSum(A *Data, B x, int size) {
B sum = 0;
for (int i=0; i < size; i++) sum += Data[i];
return ((sum > x) ? 1 : 0);
}
void main() {
int Data1[5] = {2, 3, 4, 5, 6};
float Data2[4] = {1.5, 2.6, 3.2, 5.1};
if ( GTSum(Data1, 20, 5) )
cout << “Total nilai Data1 lebih dari 20” << endl;
else
cout << “Total nilai Data1 tidak lebih dari 20 \n”;
if ( GTSum(Data2, 10.5, 4) )
cout << “Total nilai Data2 lebih dari 10.5 \n”;
else
cout << “Total nilai Data2 tidak lebih dari 10.5”;
}
Bina Nusantara
Template Class
Template juga dapat diterapkan pada class
dengan format:
template <class T> class nama_class
{
// deklarasi class
};
Bina Nusantara
// program template pada class stack
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
// template definition
template <class T> class Stack {
private:
T *Data;
int Size;
int CountData;
public:
Stack(int Size = 25);
~Stack();
void Push (T nilai);
T Pop();
int stackEmpty();
int stackFull();
};
Bina Nusantara
template <class T>
Stack<T> :: Stack( int Size ) { //constructor
Stack::Size = Size;
CountData = 0;
Data = new T [Size];
}
template <class T>
Stack<T> :: ~Stack() { // destructor
delete [ ] Data;
}
template <class T>
int Stack<T> :: stackEmpty() {
return ( (CountData == 0)? 1: 0 );
}
template <class T>
int Stack<T> :: stackFull () {
return ( (CountData == Size)? 1: 0 );
}
Bina Nusantara
template <class T>
void Stack<T> :: Push (T nilai) {
if ( !stackFull() )
Data[CountData++] = nilai;
else
cerr << “Stack penuh” << endl;
}
template <class T>
T Stack<T> :: Pop() {
if ( stackEmpty() ) {
cerr << “Stack kosong” << endl;
exit(1);
}
return ( Data[--CountData] );
}
Bina Nusantara
void main() {
clrscr();
Stack<float> s1;
s1.Push(10.85);
s1.Push(25.2);
cout << "Isi stack bilangan real: "<< endl;
cout << "s1 ->1 = " << s1.Pop() << endl;
cout << "s1 ->2 = " << s1.Pop() << endl;
Stack<int> s2;
s2.Push(100);
s2.Push(10);
s2.Push(5);
cout << "Isi stack bilangan bulat: "<< endl;
cout << "s2 ->1 = " << s2.Pop() << endl;
cout << "s2 ->2 = " << s2.Pop() << endl;
cout << "s2 ->3 = " << s2.Pop() << endl;
}
Bina Nusantara
Diskusi dan Tanya Jawab
Latihan soal
22
Bina Nusantara