Polymorphism adalah kemampuan untuk menggunakan operator atau fungsi dalam berbagai cara. Polimorphism memberikan arti yang berbeda atau fungsinya kepada operator atau fungsi. Poly, merujuk ke banyak, menandakan banyak kegunaan dari operator dan fungsi ini. Fungsi tunggal penggunaan atau operator berfungsi dalam banyak cara bisa disebut polimorphism. Polimorphism mengacu pada kode, operasi atau objek yang berperilaku berbeda dalam konteks yang berbeda.

Keuntungan dari konsep polimorfisme
Setelah aplikasi ditulis menggunakan konsep polimorphism, dapat dengan mudah diperluas, menyediakan objek baru yang sesuai dengan interface aslinya . Hal ini tidak perlu mengkompilasi ulang program asli dengan menambahkan tipe yang baru, hanya menghubungkan ulang diperlukan untuk menunjukkan perubahan baru bersama dengan aplikasi yang sebelumnya. Ini adalah pencapaian terbesar C + + pemrograman berorientasi obyek. Dalam bahasa pemrograman, selalu ada kebutuhan untuk menambahkan dan mengubah. Dengan memanfaatkan konsep polimorphism, waktu dan usaha kerja berkurang di samping menciptakan masa depan lebih mudah pemeliharaan.

* Membantu dalam usabilitas kode.
* Menyediakan lebih mudah pemeliharaan aplikasi.
* Membantu dalam mencapai ketahanan dalam aplikasi.

Polymorphism dibedakan menjadi 2 jenis, yakni:
1. Trivial polymorphism

* menggunakan C style
* function terjadi pada saat compile time
* dengan menggunakan functin overloading
* link body function + function header / prototype

2. True polymorphism

* menggunakan C++ style
* dengan virtual method
* function didefinisi saat runtime
* terdapat dalam ADT atau abstrak data class
* compiler membuat UMT untuk class yang mengandung polyorphism
* jika derived class memiliki fungsi yang sama (overriding), maka UMT akan menunjuk ke fungsi base class

Implementasi polymorphism dapat dilakukan dengan dua cara, yaitu:
1. Overloading function
adalah penggunaan kembali nama fungsi yang sama tapi dengan argumen yang berbeda
3 signature yang perlu diperhatikan dalam melakukan overloading :

* Jumlah argument
* Letak argument
* Type argument

Contoh :
Void hitung (int x, int y);
Void hitung(float x, float y);
2. Overriding function
adalah sebuah fungsi dalam class turunan yang memiliki nama, return type dan argumen function yang sama dengan fungsi dalam class induk
Ada 2 jenis virtual method dalam overriding, yaitu :
1. Pure Virtual Method
merupakan virtual method yang hanya mendeklarasikan function prototipes saja (tidak memiliki implementasi)
Suatu class yang memiliki pure virtual method. Instance (object) tidak dapat dibuat dari suatu abstract class,
karena masih ada fungsi yang tidak memiliki function body. Ciri dari pure virtual method adalah pada deklarasi ditulis fungsi() = 0.
Contoh :
class kendaraan
{
virtual void jalan()= 0;
};
2. Squasi Virtual Method
merupakan virtual metthod yang mempunyai function body atau implementasi
Contoh :
class kendaraan
{
virtual void jalan() {;}
};
Dan pada penggunaannya hanya destructor saja yang dapat dibuat virtual.