Kelas Induk Abstrak C++

posted in: Pemrograman C++ | 0

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:

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:

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:

#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.

 

“Ada sebuah mata uang yang selalu berlaku disetiap masa dan itu adalah ilmu serta keterampilan. Jika anda tidak memiliki keduanya, maka anda tidak bisa membeli apapun”

Salam sinauarduino.com

Leave a Reply