Abstract Class adalah kelas yang tidak dapat diinstansiasi (tidak bisa dibuat objeknya) dan dirancang untuk digunakan sebagai kelas dasar (base class) bagi kelas turunan. Kelas ini digunakan untuk mendefinisikan antarmuka atau struktur yang harus diikuti oleh kelas turunan, tetapi tidak menyediakan implementasi lengkap dari semua fungsinya.
Di C++, kelas menjadi abstract jika memiliki pure virtual function (fungsi virtual murni), yaitu fungsi yang dideklarasikan dengan = 0
di akhir deklarasinya. Fungsi ini tidak memiliki implementasi di kelas induk, dan harus di-override di kelas turunan.
Sintaks Abstract Class dan Pure Virtual Function
class NamaKelas {
public:
virtual void fungsi() = 0; // Pure virtual function
};
= 0
setelah deklarasi fungsi menunjukkan bahwa itu adalah fungsi virtual murni (pure virtual function).- Kelas yang memiliki fungsi virtual murni akan menjadi kelas abstract dan tidak dapat diinstansiasi langsung.
Contoh Abstract Class di C++
Contoh 1: Kelas Abstract dengan Pure Virtual Function
#include <iostream>
using namespace std;
// Kelas abstrak
class Bentuk {
public:
virtual void gambar() = 0; // Fungsi virtual murni
};
class Lingkaran : public Bentuk {
public:
void gambar() override {
cout << "Menggambar Lingkaran." << endl;
}
};
class Persegi : public Bentuk {
public:
void gambar() override {
cout << "Menggambar Persegi." << endl;
}
};
int main() {
// Bentuk bentuk; // Tidak bisa membuat objek dari kelas abstrak
Bentuk* bentuk1 = new Lingkaran();
Bentuk* bentuk2 = new Persegi();
bentuk1->gambar(); // Memanggil metode Lingkaran
bentuk2->gambar(); // Memanggil metode Persegi
delete bentuk1;
delete bentuk2;
return 0;
}
Output:
Menggambar Lingkaran.
Menggambar Persegi.
Penjelasan:
- Kelas
Bentuk
adalah kelas abstrak karena memiliki pure virtual functiongambar()
. - Lingkaran dan Persegi meng-override fungsi
gambar()
untuk memberikan implementasi spesifik. - Anda tidak bisa membuat objek dari kelas abstrak Bentuk secara langsung, tetapi bisa membuat objek dari kelas turunan yang mengimplementasikan fungsi virtual murni.
Kapan Menggunakan Abstract Class?
- Untuk mendefinisikan antarmuka umum yang harus diikuti oleh kelas turunan.
- Untuk memastikan bahwa kelas turunan mengimplementasikan fungsi tertentu, yang mungkin memiliki implementasi berbeda di setiap kelas turunan.
- Untuk mencegah instansiasi langsung dari kelas yang seharusnya hanya berfungsi sebagai template atau dasar.
Contoh 2: Penggunaan Abstract Class dalam Polimorfisme
Kelas abstrak juga sering digunakan untuk mendukung polimorfisme, memungkinkan objek yang berbeda berperilaku berbeda meskipun memiliki tipe yang sama (kelas dasar).
#include <iostream>
using namespace std;
// Kelas abstrak
class Hewan {
public:
virtual void suara() = 0; // Fungsi virtual murni
};
class Anjing : public Hewan {
public:
void suara() override {
cout << "Anjing menggonggong." << endl;
}
};
class Kucing : public Hewan {
public:
void suara() override {
cout << "Kucing mengeong." << endl;
}
};
int main() {
Hewan* hewan1 = new Anjing();
Hewan* hewan2 = new Kucing();
hewan1->suara(); // Memanggil metode Anjing
hewan2->suara(); // Memanggil metode Kucing
delete hewan1;
delete hewan2;
return 0;
}
Output:
Anjing menggonggong.
Kucing mengeong.
Penjelasan:
Hewan
adalah kelas abstrak dengan fungsi virtual murnisuara()
.- Kelas turunan
Anjing
danKucing
mengimplementasikan fungsisuara()
. - Polimorfisme digunakan dengan pointer kelas induk
Hewan
, yang menunjuk ke objek kelas turunan.
Abstract Class dengan Konstruktor
Kelas abstrak juga bisa memiliki konstruktor. Namun, konstruktor ini hanya digunakan saat objek kelas turunan dibuat. Anda tidak bisa membuat objek dari kelas abstrak langsung.
#include <iostream>
using namespace std;
class Kendaraan {
public:
Kendaraan() {
cout << "Kendaraan diciptakan." << endl;
}
virtual void bergerak() = 0; // Fungsi virtual murni
};
class Mobil : public Kendaraan {
public:
void bergerak() override {
cout << "Mobil bergerak." << endl;
}
};
int main() {
// Kendaraan kendaraan; // Tidak bisa dibuat objek karena Kendaraan adalah kelas abstrak
Mobil mobil;
return 0;
}
Output:
Kendaraan diciptakan.
Keuntungan Menggunakan Abstract Class
- Mendefinisikan Antarmuka Umum: Anda dapat mendefinisikan antarmuka yang harus diikuti oleh semua kelas turunan, memastikan konsistensi.
- Menjamin Implementasi: Fungsi virtual murni memaksa kelas turunan untuk mengimplementasikan fungsi tertentu.
- Polimorfisme: Abstract class memungkinkan penggunaan polimorfisme, yang memungkinkan kelas turunan dengan tipe yang sama untuk diperlakukan dengan cara yang seragam meskipun implementasi berbeda.
- Pengorganisasian Kode: Abstract class membantu dalam pengorganisasian kode dengan memungkinkan pewarisan dan pengelompokan fungsionalitas umum.
Kesimpulan
- Abstract class adalah kelas yang tidak dapat diinstansiasi secara langsung, namun digunakan sebagai template untuk kelas turunan.
- Pure virtual function (
= 0
) digunakan untuk mendefinisikan fungsi yang harus diimplementasikan oleh kelas turunan. - Abstract class memungkinkan penggunaan polimorfisme yang lebih kuat dan lebih terstruktur dalam pemrograman berorientasi objek di C++.
Jika Anda ingin contoh atau penjelasan lebih lanjut tentang penggunaan abstract class dalam skenario yang lebih kompleks, beri tahu saya! 😊
Leave a Reply