Miras (Inheritence) ile birlikte OOP için en önemli konulardan biridir diyebiliriz. Polymorphism, temelini override etmekten alıyor diyebiliriz. Elimizde var olan bir ana sınıf özelliği alt sınıflarda override edilerek farklı sonuçlar çıkartıyor ise bu durum polymorphism olarak geçiyor. Peki ya override nedir?
Override
Bir metot birden fazla kez aynı veri tipi, aynı isim ve aynı parametre ile kullanılamaz"dı". Fakat bu durumu değiştirebiliyoruz. Eğer varolan bir metot artık farklı bir işleve hizmet edecek ise onu değiştirebiliyoruz. Bu işlemi gerçekleştirirken override etmiş oluyoruz. Yani varolan bir metodu tekrar yazıyoruz. C++ programlama dilinde override ederken kullandığımız 2 ekstra ifademiz var: virtual ve override
Polymorphism
Yukarıda açıkladığım üzere override edilerek değiştirilmiş bir inheritence ilişkisine dayanıyor diyebilirim. Bir örnek ile konuyu kavrayalım:
class Hayvan{
public:
virtual string konusma(){
return "Konusamiyor!";
}
};
class Kedi:Hayvan{
public:
string konusma() override {
return "miyav";
}
};
class Kopek:Hayvan{
public:
string konusma() override {
return "havhav";
}
};
int main(){
Hayvan X;
Kedi Y;
Kopek Z;
cout << "Hayvan: " << X.konusma() << endl;
cout << "Kedi: " << Y.konusma() << endl;
cout << "Kopek: " << Z.konusma() << endl;
}
Hayvan ana sınıfında belirttiğimiz konusma metodunu alt sınıflarda değiştirebilmek için ana sınıfdaki metodun başına virtual ibaresini ekliyoruz. Alt sınıflarda değiştirdiğimiz ifadelerde de sonuna override ifadesini ekliyoruz.
Sonuçta:
Hayvan: Konusamiyor!
Kedi: miyav
Kopek: havhav