Pert 9 dan Pert 10

Sabtu, 12 Desember 2009

INHERITANCE DAN INHERITANCE LANJUTAN
====================================

The goal --> Reusability & Extenability
Proses pembentukan satu kelas baru (derived class) dari kelas lainnya (based class) ..

derived class=class turunan
based class=class induk

Cara jalan constructur tetap berurut dimulai dari constractor based class baru constructor derived class dijalankan untuk destructor sebaliknya...

Syntax:
class nama_turunan : level_akses , nama_induk
{anggota_klas}

level_akses maksudnya public,protected,private...

contohnya:
class induk
{ protected: int a;};

class anak : public , induk
{protected: char nama[23];}

yang dapat di turunkan hanya public dan protected..
level_akses berpengaruh dalam mengubah jenis akses pada kelas turunan.....

Class Induk ----------- Jenis akses class turunan
---------------------- Public-------Protected------Private
Public-------------- Public-------Protected------Private
Protected--------- Protected----Protected------Private
Private------------- Private------Private---------Private

untuk membuat Hierarki class tanda panah (->) menunjuk ke based class...


Multiple Inheritance
``````````````````
Yang membedakan nya adalah class turunan mendapatkan pewarisan dari klas..
misal class anak mendapat pewarisan dari class ibu dan class ayah...

Syntax:
class nama_turunan : level_akses , nama_induk1, nama_induk2
{anggota_klas}

dalam hal ini tidak ada batasan banyak induk bisa sebanyak apapun yang diinginkan..
constuctor pun dijalankan berurutan dari induk1 kemudian induk2 baru turunannya sedangkan destructor sebaliknya....

Dalam melakukan multiple inheritance terkadang dapat menimbulkan "diamond problem"
Apa itu diamond problem?????
adalah saat class induk memiliki nama method yang sama, misalnya:

class induk1
{ protected:
int a;
public:
void tes(){ cout << "induk1"; }
};

class induk2
{ public:
void tes(){ cout << "induk2"; }
};

class anak:public induk,public induk2
{ };

void main()
{
anak obj;
obj.tes(); // --> akan eror disini
// eror karena class anak bingung mau mengambil tes yg mna??
// karena itu yang eror seharunya diganti anak.induk1::tes();
//maksudnya anak akan mengambil tes yg ada pd class induk1..

cin.get();}

0 komentar:

Posting Komentar