Şimdi Polymorphism nedir? Sorusu ile ilk adımı atalım.

<aside> ❕ Polimorfizm, C++ gibi birçok programlama dilinde bulunan bir kavramdır ve "çok biçimlilik" anlamına gelir. Bu kavram, farklı nesne veya veri tiplerinin aynı arabirim üzerinden çalışabilmesini sağlar. Polimorfizm, programların daha esnek, modüler ve genişletilebilir olmasını sağlar.

</aside>

Şimdi nedir bu çok biçimlilik nasıl kullanırız bunu kodda sorularına gelmeden önce bu konuyu daha netleştirelim.

Bunun için kedigiller ailesini örnek alalım. Kedi ırkı içerisinde kedi dediğimizde ilk aklımıza gelen sokaktaki tatlı canlılardan sonra kaplarlar ve çitalar gelebilir. Ancak hepsinin çıkardığı ses farklı.

Bir sınıf tanımladığımızı düşünelim. Her sınıf için ayrı ayrı sınıflardan önce bir base sınıf inşa ederiz demi?

class Kedigiller{
	public:
		void ses(void);
};

Bu base sınıfımızı miras alan kaplan,kedi,çita vb. sınıflarımız olur.

class Kedi : public Kedigiller{};
class Aslan : public Kedigiller{};
class Cita : public Kedigiller{};

Normal inharetence’a göre hepsine ses methodunu yazarak override edebiliriz. Görelim.

#include <iostream>

class Kedigiller{
	public:
		void ses(void){
			std::cout << "Base kedigiller" << std::endl;
		}
};

class Kedi : public Kedigiller{
	public:
		void ses(void){
			std::cout << "Kedi Miyavladı." << std::endl;
		}	
};
class Aslan : public Kedigiller{
	public:
		void ses(void){
			std::cout << "Aslan Kükredi." << std::endl;
		}
};
class Cita : public Kedigiller{
	public:
		void ses(void){
			std::cout << "Çita miyavladı." << std::endl;
		}
};

int main(){
	Kedigiller	b;
	Kedi		k;
	Aslan		a;
	Cita		c;
	b.ses();
	k.ses();
	a.ses();
	c.ses();

}

Nasıl bir ekran çıktısına sahip oluruz ?

Base kedigiller Kedi Miyavladı. Aslan Kükredi. Çita miyavladı.

Şimdi bu yaptığımız  Çok Şekillilik ( Polymorphism ) değil. Bu normal bir inheritance ve alt sınıfların üst sınıfın fonksiyonunu ezmeleri (override) örneğidir.

Bunun polymorphism olması için aynı arayüz üzerinden çalıştırılmaları gerekmektedir.

int main(){
	Kedigiller *b[3];

	Kedi		k;
	Aslan		a;
	Cita		c;

	b[0] = &k;
	b[1] = &a;
	b[2] = &c;

	b[0]->ses();//kedi.
	b[1]->ses();//aslan.
	b[2]->ses();//cita.
}

Şimdi bu şekilde kullandığımız da polymorphism kullanmış oluyoruz. Aynı arayüz üzerinden çok şekillilik yapmış oluyoruz. Ancak bu kodda bir problem var eğer yukarıda ki main ile değiştirip çalıştırırsanız ekranda 3 defa “Base Kedigiller” yazısı görüceksiniz. Bunun nedeni artık burada işlerin değişmiş olduğudur.

Şimdi burada ki sorunu çözmek için kedigiller sınıfında ki ses methodunu sanallaştırmamız gerekiyor.

class Kedigiller{
	public:
		virtual void ses(void){
			std::cout << "Base kedigiller" << std::endl;
		}
};