genel olarak çok şekillilik anlamına gelir.
nesneye dayalı programlamada, türetilen sınıfa
* ait bir işaretçi ya da referansın ondan türemiş
* olan nesne ya da nesnelerde kullanılması anlamına gelir. klasik bir c++ kodu ile örneklersek:
class hayvan{
public:
virtual void uc(){ printf("bu hayvan ucamaz"); } // polimorf metot (virtual)
void nefesal(){ printf("oh mis"); }
...
};
class kus : public hayvan{
// metodlar miras alındı
void uc();
};
void kus::uc(){
printf("ucuyorum"); // burada polimorf metodu kus sınıfı icin gercekledik
}
class kedi : public hayvan{
// kedimiz de bu olsun
};
ana fonksiyonda;
main()
{
hayvan *ptrhayvan;
ptrhayvan = new kedi; // kedi nesnemiz
ptrhayvan->uc(); // bu hayvan uçamaz mesajını ekrana yazar
delete ptrhayvan; // arkamızda çöp bırakmayalım
ptrhayvan = new kus; // kuş nesnemiz
ptrhayvan->uc(); // ekrana uçuyorum yazar (uc() polimorf bir metottu)
return 0;
}
eğer uc() polimorf olmasaydı, işaretçimiz nesneden bağımsız olarak hep aynı metodun çağırılmasına neden olacaktı. oysa şu durumda işaret edilen nesnenin türüne göre o nesnenin metodu çağırılıyor (polimorf ise).
hangi polimorf metodun çağırılacağına programın çalışma anında karar verilir, buna
late binding denir.