Sanal Fonksiyon Nedir?
Bir sanal işlev, bir üst sınıfta tanımlanan, bu alt sınıfın
tam bir sınıf tanımına sahip olması için bir alt sınıfta bulunması gereken bir
işlevdir. Sanal işlevler , sanal devralma adı verilen nesne yönelimli
programlama paradigmasına dayanır ; çiftçi destek kredisibu, çoğunlukla "sanal" anahtar
sözcüğünü kullanarak C ++ 'da görülür . Bir sanal işlevi tanımlamak için iki
sınıf gereklidir, bir üst sınıf ve bir alt sınıf. Süper sınıf, fonksiyonun önce
bildirildiği ve muhtemelen tanımlandığı yerdir. Alt sınıf, fonksiyonun süper
sınıfta tanımlanmış olmasına bağlı olarak fonksiyonun tanımlandığı veya
geçersiz kılındığı yerdir.
Sanal işlev, iki yoldan biri ile tanımlanabilir. İlk olarak,
içinde boş bir vücuda sahip olduğu ve hiçbir şey yapmadığı bir saplama olarak
tanımlanabilir. İkincisi, süper sınıfın başlık dosyasında NULL olarak
tanımlandığı saf sanal işlev olarak tanımlanabilir.
Her iki metodolojinin de avantajları ve dezavantajları
vardır. Bir fonksiyonun bir saplama olarak tanımlanması, tüm alt sınıfların,
hiçbir şey yapmasa bile, onun bazı uygulamalarına sahip olmasını sağlar. Ancak,
bir alt sınıfı içinde işlevi geçersiz kılmayı ve düzgün bir şekilde uygulamayı
unutursanız, bunu belirtmek için hiçbir hata veya uyarı görünmez. Öte yandan,
salt sanal bir fonksiyon tanımlamak, her bir alt sınıfın kendi fonksiyon
tanımına sahip olmasını gerektirir ve eğer durum böyle değilse hatalar ortaya
çıkar.
Bununla birlikte, sanal işlevler sanal olmayan işlevlerle
aynı devralma kurallarına tabidir; bu nedenle, ikiden fazla düzeydeki devralma
hiyerarşileri, sanal işlevlerin açık tanımlarını gerektirmeyebilir. Örneğin,
alt sınıf B'de uygulanan bir sanal işlevi bildiren bir sınıf A
düşünebilirsiniz. B Sınıfı, kendi sınıf C sınıfının bir alt sınıfına sahiptir.
Sınıf C, A sınıfı işlevinin açık bir tanımını gerektirmez, çünkü miras alır.
Sınıf B'nin tanımı. Gerekirse, C sınıfı, B sınıfı işlevini geçersiz kılabilir
veya aynı zamanda B sınıfı işlevini de geçersiz kılabilir.
Diğer uçta, bu alt sınıfta sanal olarak bildirildiyse, sanal
işlevlerin bir alt sınıfta tanımlanması gerekmez. Örneğin, bir sanal işlevi
bildiren ve B ve C'nin iki alt sınıfa sahip olan bir A sınıfı düşünülebilir. Ek
olarak, B sınıfının D ve E alt sınıflarına sahip olduğunu ve alt sınıf C'nin F
ve G alt sınıflarını içerdiğini hayal edebilir.
B ile Sınıflar arasındaki sınıfların hepsi bir şekilde
tanımlanmış A sınıfı sanal işleve sahip olmalıdır. Eğer B sınıfı, A'nın bir
fonksiyonuna sahipse, D ve E sınıfları, yeniden yapılmaya ihtiyaç duymaz. Belki
de C'nin alt sınıflarının A'nın işlevini yerine getirmesi gerekir, ancak her
ikisi de farklı bir şey yapar, bu yüzden C sınıfındaki işlevi tanımlamak
yararlı olmaz. Bu durumda, kredi kartı başvurusu kredi notunu etkiler
miişlev C sınıfında sanal olarak bildirilebilir
ve bir uygulama gerekli değildir.
Sanal işlevler öğrenmek zor olabilir, ancak doğru
kullanıldığında kod çoğaltmayı azaltabilir ve genel olarak anlaşılması çok daha
kolay bir kod haline getirebilirler. Bununla birlikte, sanal işlevlere sahip,
ancak özellikle birden fazla kalıtımla ilgili birçok tuzak vardır. Birden fazla
kalıtımda, belirsiz şekilde tanımlanmış sanal işlevlerin birbiriyle çakışması
mümkündür, bu nedenle bu bağlamda dikkatli kullanılmalıdır.
Yorumlar
Yorum Gönder