Rule INT#021 - Sınıf türünden arguman geçilmesi (Pass arguments of class types by reference or pointer)


Bir fonksiyonun base sınıf türünden bir parametresi varsa bu durumda dikkat edilmesi gereken bazı noktalar vardır. Aşağıda verilen base ve derived sınıf yapısı üzerinden bu noktaları anlatmak gerekirse:


Aşağıda yer alan AnimalCry() fonksiyonunun Animal türünden parametresi vardır. Fakat bu fonksiyona arguman olarak derived class türünden bir nesne gönderilir ise ne olur? Derived sınıf türünden bir nesne gönderilirse object slicing durumu oluşmakta ve Dog sınıfının cry fonksiyonu çağrılmayacaktır.


Bu durumu engellemek için kod stadartları fonksiyonun parametresi referans (aşağıda görüldüğü gibi):



Veya pointer olması gerekmektedir. Bu sayede yukarıda ve aşağıda görüleceği üzere istenilen sınıfın üye fonksiyonları çağrılacaktır.


Not: Zaten bir sınıfı parametre olarak göndermek verimli kod standartı açısından kabul edilebilir bir yöntem değildir. Ama sanallık mekanizması ve türetme sözkonusu olduğunda bu durumda verimli kod yazmanın yanında hatasız kod yazmak için çok daha gerekli olan bir yöntemdir.