C++ Polymorphism ve Abstract
Merhaba arkadaşlar bu dersimizde polymorphism(Çokbiçimlilik) ve abstract classları anlatacağım.
Polymorphism,birden fazla işleve sahip olmaktır.Genel olarak polymorphism,bir sınıf hiyerarşisi olduğu zaman ve devralmayla oluşur.Polymorphism ve kalıtım birlikte kullanılır.Fonksiyon ve operatörlerdeki aşırı yüklenmelerde aslında polymorphisme örnektir.
Polymorphism,kalıtımda olduğu gibi kodları tekrar kullanmamıza yani kod içerisinde karmaşayı kolaylaştırır.
Polymorphism’de bir classtan birden fazla class miras alır.Bu bize kod için tasarruf sağlar.Büyük projelerde ne kadar kodları azaltabilirsek bir sonrakikontrol için işimizi kolaylaştırmış olur.Bir örnek ile bunu görelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#include "stdafx.h" #include <iostream> using namespace std; class polymorphism { public: polymorphism(); }; polymorphism::polymorphism() { cout << "Polymorphism Sinifi" << endl; } class sinif1 :public polymorphism {public: sinif1(); }; sinif1::sinif1() { cout << "Birinci Class Calisti" << endl; } class sinif2 :public polymorphism { public: sinif2(); }; sinif2::sinif2() { cout << "Ikinci Class Calisti" << endl; } int main() { sinif1 s1; sinif2 s2; system("Pause"); return 0; } |
Polymorphism’i böylece anlamış olduk.
Abstract
Şimdi ise abstract(soyut) sınıflardan bahsedelim.
Bir kalıtım olayında alt sınıflar,abstract sınıfndan kalıtım yaparlar.Böyle abstract sınıfındaki uygun olan tüm fonksiyon ve değişkenleri ddiğer sınıflar kullanabilirler.
Abstract olarak tanımlanmış sınıfın içinde abstract olarak tanımlı fonksiyon,değişkenler gibi değerleri tanımlamak gerekmektedir.Bunu da bir örnek ile görelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#include "stdafx.h" #include <iostream> using namespace std; class Cicekler //Abtstract Class { public: string tur="a"; int yaprakSayisi=0; public : virtual int Cesit() = 0;//Abstract fonksiyon }; class Papatya :public Cicekler { public: int Cesit() { yaprakSayisi = 4; cout << "Papatya Yaprak Sayisi 4" << endl; return 0; } }; int main() { Papatya p; p.Cesit(); system("Pause"); return 0; } |
Burada abstract olarak tanımladığımız sınıfımızdan abstract olarak soyut bir fonksiyon tanımlayıp miras aldığı sınıf içerisinde kullanmış olduk.Abstract fonksiyonu tanımladığımız sınıf içerisinde gövdesizdir.Herhangi işlem yapılmaz ancak diğer kalıtım yaptığımız sınıfta fonksiyon içerisinde işlemler yapabiliriz.