- Tiplerin Kapsüllenmesi ve Genişletilebilirliği
- Kalıtım
- Polimorfizm
- Aşırı Yükleme
- Sanal Fonksiyonlar
- Bir Sınıfın Statik Elemanları
- Fonksiyon Şablonları
- Şablon avantajları
- Soyut Sınıflar
Polimorfizm
Polimorfizm, aynı fonksiyon elemanının çağrılması durumunda farklı cevaplar alınabildiği için, kalıtımsal ilişkiye sahip faklı nesne sınıfları için bir fırsattır. Bu, sadece temel sınıfın değil aynı zamanda türetik sınıfların davranışlarının da tarif edilebildiği evrensel bir mekanizma oluşturmaya yardımcı olur.
Şimdi yeni bir temel sınıf oluşturalım ve şekil alanını hesaplaması için GetArea() diye bir üye fonksiyon tanımlayalım. Bu fonksiyonu, temel sınıftan kalıtım yoluyla oluşturulmuş tüm varis sınıflarda, belirlenen özel şeklin alan hesabı için gerekli kurallar ışığında, yeniden tanımlayalım.
Karenin (CSquare sınıfı) alanı kenarlara göre hesaplanır;, Daire (class CCircle) alanı ise yarı çapla ifade edilir vb. CShape tipinin nesnelerini içeren bir dizi oluşturabiliriz. Bu, temel sınıfın ve tüm varis sınıfların nesnelerinin saklandığı bir dizi olacaktır. Sonra bu dizinin her elemanı için aynı fonksiyonu çağırabiliriz.
Örnek:
//--- Temel sınıf
|
Artık tüm türetik sınıflarda sıfıra dönüş yapan bir getArea() üye fonksiyonu vardır. Bu fonksiyonun uygulaması her bir türetik sınıf için değişecektir.
//--- Daire türetik sınıfı
|
Kare sınıfı için yapılacak bildirim de aynıdır:
//--- Kare türetik sınıfı
|
Kare ve dairenin alanlarını hesaplamak için m_radius (yarı çap) ve m_square_side (kenar uzunluğu) değişkenlerine karşılık gelen değerlere ihtiyacımız oldu için, SetRadius() ve SetSide() fonksiyonlarını bildirime ekledik.
CShape temel tipinden türetilmiş (CCircle ve CSquare) nesnelerinin, programımızda kullanıldığını varsayalım. Polimorfizm, CShape temel sınıfının nesnelerinden bir dizi oluşturulmasını sağlar ama bu dizinin bildirimi sırasında nesneler hala bilinmezdir ve tipleri tanımsızdır.
Dizinin her bir elemanında hangi tip nesnenin yer alacağı kararı programın çalıştırılması sırasında alınır. Bu, uygun sınıfların nesnelerinin dinamik olarak oluşturulmasını ve bundan dolayı, nesneler yerine nesne işaretçilerinin kullanımının gerekliliğini içerir.
new operatörü nesnelerin dinamik şekilde oluşturulmaları için kullanılır. Bu şekildeki her bir nesne delete operatörü ile, tek tek ve açıkça silinmelidir. Bu yüzden CShape tipinin işaretçilerinden oluşan bir dizi bildireceğiz ve aşağıdaki örnekte de görüleceği gibi, her bir (new Sınıf_İsmi) eleman için uygun tipte bir nesne oluşturacağız:
//+------------------------------------------------------------------+
|
Bir nesne delete operatörü ile silindiğinde, işaretçi tipinin kontrol edilmesi gerektiğini lütfen not edin. Sadece POINTER_DYNAMIC tipine sahip işaretçiler "delete" kullanılarak silinebilir. Diğer işaretçi tiplerinde ise bir hata dönülecektir.
Ama polimorfizm, fonksiyonların kalıtım sırasında yeniden tanımlanmasının yanında, bir sınıf içindeki farklı parametre kümelerine sahip olan aynı fonksiyonların uygulamasını da içerir. Bu, sınıfın aynı isimde ama farklı tip ve/veya parametre kümesine sahip fonksiyonlara sahip olabileceği anlamına gelir. Bu durumda polimorfizm fonksiyonların aşırı-yüklenmesi yoluyla uygulanır.
Ayrıca Bakınız