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

Bu blogdaki popüler yayınlar

Vahşi Batı nedir?

Dahili Modem nedir?

VGA Soketi Nedir?