Kelas Induk Abstrak C++

Pada tutorial virtual function dapat kamu lihat bahwa kelas induk memiliki sebuah virtual member yaitu luas(). Fungsi luas() pada kelas induk bukan merupakan prototype karena fungsi ini juga memiliki tugasnya sendiri yaitu akan mengembalikan nilai 0 jika fungsi tersebut dipanggil. Jika terdapat pointer yang menunjuk kepada objek kelas turunan, maka fungsi tersebut tidak akan dipanggil, melainkan akan lebih memilih memanggil fungsi pada kelas turunan.
Kamu dapat membuat suatu virtual function yang tidak memiliki fungsi sama sekali yaitu dengan memberikan nilai 0 pada fungsi tersebut. Sintaksnya Mimin jelaskan sebagai berikut:
1
virtual tipeFungsi namaFungsi() = 0;
Virtual function yang dideklarasikan dengan cara di atas disebut sebagai pure virtual function atau virtual abstrak. Kelas yang memiliki member ini disebut sebagai kelas abstrak. Fungsi virtual pada umumnya diletakan pada kelas induk, sehingga sering disebut sebagai kelas induk abstrak. Keistimewaan kelas induk abstrak adalah tidak memiliki objek. Sehingga apabila kamu memiliki kelas induk dengan nama induk,  maka deklarasi objek sebagai berikut tidak dapat dilakukan:
1
induk objek_induk;
Namun yang menjadi perhatian adalah, kelas induk masih dapat digunakan dalam mendeklarasikan pointer dan melakukan mekanismpe polymorphism pada kelas turunannya.
kamu masih penasaran dengan kelas induk abstrak yang tidak dapat memiliki objek? Baik Mimin akan buktikan dengan sintaks berikut:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
using namespace std;
class induk{
protected:
 int sisi_a,sisi_b;
public:
 void input(float panjang, float lebar);
 virtual float luas() = 0; //Pure Virtual Function
};
void induk::input(float panjang, float lebar){
sisi_a = panjang;
sisi_b = lebar;
}
class anak:public induk{
public:
 float luas(){return sisi_a*sisi_b;};
};
int main(){
 induk objekInduk; //mencoba mendeklarasikan objek pada kelas induk abstrak
 induk *pointerAnak;
 anak o;
 pointerAnak = &o;
 pointerAnak->input(9,8);
 cout<<"Nilai dari pointerAnak->luas() adalah = "<<pointerAnak->luas()<<endl;
 return 0;
}
kompile program di atas dan lihat apa yang terjadi. Mimin mendapatkan bahwa program pada saat kompilasi mengalam error pada saat mendeklarasikan objek kelas induk sebagai berikut:
abstrak-error
Dan pesan error yang muncul adalah:
abstrak-error2
Hal ini membuktikan bahwa kelas induk abstrak oleh karena memiliki member pure virtual function, tidak dapat memiliki objek namun masih dapat membuat pointer dan melakukan mekanisme polymorphism.

No comments:

Post a Comment

Pengurutan bilangan dari besar ke kecil dengan C++

Berikut program mencari mengurutkan bilangan dari besar ke kecil dengan metode Bubble Shorting. #include <iostream>    using name...