Polimorfisme adalah salah satu pilar utama dalam Pemrograman Berorientasi Objek (OOP). Polimorfisme memungkinkan suatu fungsi atau objek berperilaku berbeda tergantung pada konteksnya. Di C++, polimorfisme dapat dibagi menjadi dua jenis utama:
- Polimorfisme Kompilasi (Compile-time Polymorphism)
- Melibatkan overloading (fungsi dan operator).
- Polimorfisme Run-time (Run-time Polymorphism)
- Melibatkan inheritance dan pointer atau referensi dengan fungsi virtual.
1. Polimorfisme Kompilasi
A. Function Overloading
Function overloading memungkinkan Anda mendefinisikan beberapa fungsi dengan nama yang sama tetapi dengan parameter yang berbeda.
Contoh:
#include <iostream>
using namespace std;
class Kalkulator {
public:
// Overloading fungsi tambah
int tambah(int a, int b) {
return a + b;
}
double tambah(double a, double b) {
return a + b;
}
int tambah(int a, int b, int c) {
return a + b + c;
}
};
int main() {
Kalkulator k;
cout << "Tambah (int): " << k.tambah(5, 3) << endl;
cout << "Tambah (double): " << k.tambah(2.5, 3.5) << endl;
cout << "Tambah (3 argumen): " << k.tambah(1, 2, 3) << endl;
return 0;
}
Output:
Tambah (int): 8
Tambah (double): 6
Tambah (3 argumen): 6
B. Operator Overloading
Operator overloading memungkinkan operator seperti +
, -
, atau *
memiliki perilaku khusus untuk objek tertentu.
Contoh:
#include <iostream>
using namespace std;
class Kompleks {
public:
double real, imag;
Kompleks(double r = 0, double i = 0) : real(r), imag(i) {}
// Overloading operator +
Kompleks operator+(const Kompleks& obj) {
return Kompleks(real + obj.real, imag + obj.imag);
}
void tampilkan() {
cout << real << " + " << imag << "i" << endl;
}
};
int main() {
Kompleks a(1.5, 2.5), b(2.0, 3.0);
Kompleks c = a + b; // Memanggil operator+
c.tampilkan();
return 0;
}
Output:
3.5 + 5.5i
2. Polimorfisme Run-time
A. Virtual Functions (Fungsi Virtual)
Fungsi virtual memungkinkan suatu fungsi yang dideklarasikan dalam kelas induk dapat dioverride oleh kelas turunan.
Contoh:
#include <iostream>
using namespace std;
class Hewan {
public:
virtual void suara() { // Fungsi virtual
cout << "Hewan mengeluarkan suara." << endl;
}
};
class Anjing : public Hewan {
public:
void suara() override { // Override fungsi suara
cout << "Anjing menggonggong." << endl;
}
};
class Kucing : public Hewan {
public:
void suara() override {
cout << "Kucing mengeong." << endl;
}
};
int main() {
Hewan* hewan; // Pointer ke kelas induk
Anjing anjing;
Kucing kucing;
hewan = &anjing;
hewan->suara(); // Memanggil versi Anjing
hewan = &kucing;
hewan->suara(); // Memanggil versi Kucing
return 0;
}
Output:
Anjing menggonggong.
Kucing mengeong.
B. Pure Virtual Functions dan Abstract Class
Pure virtual function digunakan untuk mendefinisikan kelas abstrak yang tidak dapat diinstansiasi.
Contoh:
#include <iostream>
using namespace std;
class Bentuk {
public:
virtual void gambar() = 0; // Pure virtual function
};
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;
Lingkaran lingkaran;
Persegi persegi;
bentuk = &lingkaran;
bentuk->gambar(); // Memanggil versi Lingkaran
bentuk = &persegi;
bentuk->gambar(); // Memanggil versi Persegi
return 0;
}
Output:
Menggambar Lingkaran.
Menggambar Persegi.
Kesimpulan
- Polimorfisme Kompilasi:
- Function overloading.
- Operator overloading.
- Polimorfisme Run-time:
- Menggunakan inheritance dan fungsi virtual.
- Dapat memanfaatkan pure virtual function untuk membuat kelas abstrak.
Polimorfisme membantu membuat kode lebih modular, fleksibel, dan dapat diperluas. Jika ada aspek yang ingin Anda pelajari lebih lanjut, seperti implementasi polimorfisme dengan template atau studi kasus, beri tahu saya! 😊
Leave a Reply