Ads (728x90)

Latest Post

Kesehatan

Tips


C++ juga memberikan fasilitas inheritance pada kelas. Proses pewarisan pada C++ agak lebih rumit dibandingkan dengan Java. Hal ini karena C++ memberikan kemungkinan pewarisan dengan pertimbangan hak akses. Ada dua hak akses dalam pewarisan superclass ke subclass, yaitu: public dan private.

Apabila suatu kelas diturunkan sebagai public dari superclassnya, maka ketentuannya adalah sebagai berikut:
  • Bagian public yang ada pada superclass akan tetap menjadi public pada subclass.
  • Bagian protected yang ada pada superclass akan tetap menjadi protected pada subclassnya.
  • Bagian private yang ada pada superclass tidak akan dapat diakses oleh subclass.

Apabila suatu kelas diturunkan sebagai private dari superclassnya, maka ketentuannya adalah sebagai berikut:
  • Bagian public yang ada pada superclass akan menjadi private pada subclass.
  • Bagian protected yang ada pada superclass akan menjadi private pada subclassnya.
  • Bagian private yang ada pada superclass tidak akan dapat diakses oleh subclass.
Perhatikan contoh berikut.

Contoh 9.28. Pewarisan.

#include <iostream>
using namespace std;

class CPolygon {
protected:
int width, height;
public:
void set_values (int a, int b)
{ width=a; height=b;}
};

class CRectangle: public CPolygon {
public:
int area ()
{ return (width * height); }
};

class CTriangle: public CPolygon {
public:
int area ()
{ return (width * height / 2); }
};

int main () {
CRectangle rect;
CTriangle trgl;
rect.set_values (4,5);
trgl.set_values (4,5);
cout << rect.area() << endl;
cout << trgl.area() << endl;
return 0;
}

Pada kode program di atas, CPolygon adalah superclass, sedangkan CRectangle dan CTriangle adalah subclass. Pada kelas CPolygon, variabel width dan height dideklarasikan sebagai protected, karena ditujukan untuk bisa diakses oleh subclassnya saja. Selain itu, kelas ini juga mempunyai method set_values. Kedua variabel dan method ini akan diwariskan pada subclassnya yaitu: CRectangle dan CTriangle. Perhatikan bagaimana CRectangle dan CTriangle dideklarasikan sebagai kelas turunan dari CPolygon dengan menggunakan kata kunci public. Sekarang, coba ganti kata public pada deklarasi kelas CTriangle sehingga menjadi class CTriangle: private CPolygon. Apabila kita kompilasi, maka kita akan menjumpai pesan kesalahan sebagai berikut:

Compiling source file(s)...
oo-test.cpp
oo-test.cpp: In function `int main()':
oo-test.cpp:9: error: `void CPolygon::set_values(int, int)'
is inaccessible
oo-test.cpp:28: error: within this context
oo-test.cpp:28: error: `CPolygon' is not an accessible base
of `CTriangle'

Mengapa kesalahan kompilasi bisa terjadi? Hal ini karena berlakunya aturan di atas. Method set_values pada kelas CPolygon dideklarasikan dengan public, tetapi diturunkan ke kelas CTriangle dengan private. Hal ini akan merubah method yang semula public menjadi private ketika berada pada kelas CTriangle. Tentunya kita ingat bila anggota kelas diberi hak akses private, maka ia tidak dapat diakses dari luar.

Halaman Terkait:
| Kelas | Deklarasi kelas | Polimorfisme |

Post a Comment