Jumat, 18 Desember 2009

Inheritance

Menurut bahasa, inheritance adalah warisan atau pewarisan. Sebuah pewarisan berarti ada pewaris dan yang mewarisi. Dalam PBO, inheritance atau pewarisan adalah suatu keadaan dimana suatu kelas baru mewarisi seluruh variabel atau data dan method yang dimiliki oleh kelas yang menjadi induknya (parents). Suatu kelas bisa dikatakan mewarisi sebuah kelas lain apabila kelas tersebut memliki semua variabel dan method yang dimiliki kelas induknya dan dia sendiri mememiliki variabel dan atau method sendiri yang tidak dimiliki olek kelas induk.

Contoh pewarisan yang sederhana misalnya kelas burung. Sebuah kelas burung mempunyai antara lain :

variabel :

* warna bulu
* panjang sayap
* makanan

method :

* bisa terbang
* bisa bertelur
* bisa bersuara

kemudian kita mendefinisikan lagi sebuah kelas baru yang mewarisi variabel dan method dari kelas burung, misalnya kelas burungLiar. Maka kelas burungLiar akan mempunyai semua variabel dan method yang dimiliki oleh kelas burung disamping dia sendiri mempunyai variabel dan method sendiri yang tidak dimiliki oleh kelas burung. Jadi seluruh variabel dan method kelas burungLiar misalnya sebagai berkut :

variabel :

* warna bulu
* panjang sayap
* makanan
* habitat ( variabel hanya milik kelas burungLiar )

method :

* bisa terbang
* bisa bertelur
* bisa bersuara
* bisa berkoloni ( method hanya milik kelas burungLiar )

Tetapi tidak semua variabel atau fungsi dapat diwariskan ke kelas turunan. Variabel atau fungsi yang di deklarasikan public akan diwariskan kepada turunan, sedang variabel atau fungsi yang dideklarasi private tidak akan diwariskan ke kelas turunnya. Variabel yang hanya bisa diakses oleh turunannya biasanya dideklarasikan secara protected.

Contoh program :

#include "iostream.h"
class PersegiPanjang
{
protected :
int panjang;
int lebar;
public :
PersegiPanjang(int pj, int lb)
{
panjang = pj;
lebar = lb;
}
int Panjang()
{
return panjang;
}
int Lebar()
{
return lebar;
}
int Keliling()
{
return 2*(panjang+lebar);
}
int Luas()
{
return panjang*lebar;
}
void Skala(float sk)
{
panjang *= sk;
lebar *= sk;
}
void TulisInfo()
{
cout<<"Panjang : "<< panjang << endl
<<"Lebar :"<< lebar < <<"Keliling :"<< Keliling() << endl
<<"Luas :"<< Luas() << endl;
}
};


Simpan file di atas dengan nama PersegiPJ.Cpp
Kemudian lanjutkan pembuatan program berikut pada halaman baru:


// penggunaan kelas persegi panjang
#include "PersegiPJ.Cpp"
void main()
{
PersegiPanjang pp1(10,5);
pp1.Skala(2);
pp1.TulisInfo();
cin.get();
cin.sync();
cin.clear();
}

Senin, 07 Desember 2009

Array & Pointer of Class

Array

Suatu Objek bisa didefinisikan dalam Array.
Misalkan : Mobil merk_mobil[10];
maksudnya adalah kita membuat suatu array yang berisi 10 objek kelas mobil
Berbeda dengan array biasa, array of class tau sizenya sendiri. Selain itu array of class dapat dibandingkan dengan '==' atau '!='

Pointer

Untuk mendefinisikan suatu pointer yang menunjuk ke objek, kita bisa menggunakan suatu pointer of class. Pointer of class berguna sebagai debugging function yang mengakses 2 bytes pertama dari data member tiap objek dan mengambil nilainya.
Misalkan : Mobil *matic;

Seperti pointer yang sudah kita pelajari, tanda '*' diletakkan di depan nama variable pointer. Lalu untuk mendefinisikan pointer 'matic' tersebut untuk menunjuk suatu objek dinamis yang berkelas Mobil, kita bisa menggunakan statement :
matic = new Mobil();
New disini memiliki kegunaan yang sama dengan malloc dalam pendefinisian struct.

Contoh dalam program :

#include "constrea.h"

class First
{
public:
int value;
First() {value = 0;}
int GetValue() {return value;}
};

class Second
{
int id;
public:
First *obj1;
Second() {id = 0;}
int GetName(){ return id;}
};

int main()
{
Second Obj2;
int num;
num = Obj2.GetName();
return 0;
}


Contoh dalam program, pointer of class sebagai debugging function :

#include "constrea.h"

class Pointer
{
public: int data1, data2;
int value;
int id;
void foo1() {}
void foo2() {}
};

void SetValue(Pointer& object)
{
int Pointer::*ip = &Pointer::value;
object.*ip = 3;
}

void SetId(int *member)
{
*member = 7;
}

void main()
{
int Pointer::*ip1 = &Pointer::data1;
int Pointer::*ip2 = &Pointer::data2;
Pointer obj1;

obj1.*ip1 = 5;
obj1.*ip2 = 10;

SetValue(obj1);

int *pointer1 = &obj1.value;
int *pointer2 = &obj1.id;

SetId(pointer1);
SetId(pointer2);
}