Rule INT#026 -


Türeyen sınıf içinde base sınıfla aynı isme sahip bir fonksiyon varsa dikkat edilmesi gereken bazı noktalar vardır:

  • Base sınıf virtual ise override edip sanallık mekanizmasına dahil mi olunacak?
  • Fonksiyon virtual değilse türeyen (derived) sınıfta using bildirimi yapılarak overload mı edilecek?
  • Hiçbir şey yapılmazsa ne gibi sorunlarla karşılaşılacak?

Biz bu yazımızda 2. ve 3. kısımlara yoğunlaşacağız. Bu noktada yapılması gerekenler ve dikkat edilmesi gereken noktalar nelerdir? Aşağıda görülen kod parçasında base sınıfta char türünden parametresi olan bir fonksiyon, türeyen sınıfta ise int türünden parametresi olan bir fonksiyon bulunmaktadır. Main içinden char türünden parametresi olan fonsiyon çağrısı yapıldığında türeyen sınıfın int türünden parametresi olan cry fonksiyonu çağrıldığı görülmektedir.


Burada fonksiyon arama sırası şöyle işlemektedir. Önce derived class içine bakılır ve cry isimli bir fonksiyon bulunursa o noktadan sonra arama sonlandırılır ve parametreler uygun değil fakat dönüştürülebiliyor ise otomatik dönüştürme yapılır ve yukarıdaki gibi çağrılır. Peki otomatik bir arguman dönüştürme gerçekleşmiyor ise ne yapılır? Uygun parametreli fonksiyon mu aranacak? Tabi ki HAYIR. Aşağıda görüldüğü gibi hata verecektir.


Peki animal sınıfı içine uygun bir fonksiyon koyarsak hata ortadan kalkacak ve bu fonksiyon mu çağrılacak? Yukarıda bahsettiğimiz gibi gene hata verdiği ve base sınıf içinde bir arama yapmadığı görülecektir.



Aşağıda da  ise bu durum nasıl halledildiği görülmektedir:



Türeyen sınıf içine fonksiyonun using bildirimi yapılarak problem ortadan kaldırılmış olur. Overload çözülme (resolution) işlemi farklı sınıflar arasında kalıtım sözkonusu olsa bile doğrudan mümkün değildir. Bunun için yukarıdaki gibi using anahtar kelimesi kullanılması gerekmektedir.