Sanal işlev, temel sınıfta/üst sınıfta tanımlanan ve türetilmiş sınıfta yeniden tanımlanan bir üye işlevdir. Sanal işlev, temel sınıfa referans veya işaretçi kullanarak işlevin türetilmiş sınıf sürümünün çağrılmasına izin verir.
Sanal fonksiyon kavramını anlamak için birkaç örnek görelim.
İlk örnekte sanal olmayan fonksiyonun davranışını göreceğiz ve ardından ikinci örnekte sanal bir fonksiyonun davranışını açıklayacağız.
örnek 1
Aşağıdaki örnek kodda iki sınıfımız var: temel sınıf ve türetilmiş sınıf.
Temel sınıfın bir üye işlevi vardır, i.e., Görüntüle(). Türetilmiş sınıf, temel sınıftan miras alınır ve display() işlevi yeniden tanımlanır.
Ardından, temel sınıf türüne bir işaretçi bildirdik ve türetilmiş sınıfın bir nesnesini atadık. Bu nedenle, temel sınıf türü işaretçisini kullanarak display() işlevini çağırdığımızda, temel sınıf işlevi çağrılır. Aşağıdaki çıktıyı görebilirsiniz.
Ancak, bu gibi durumlarda, C++, temel sınıf işlevini sanal olarak bildirerek türetilmiş sınıf işlevini çağırmanın bir yolunu sağlar. Bunu anlamak için başka bir örnek göreceğiz.
#Dahil etmekad alanı std kullanarak;
sınıf Temel_Sınıf
halka açık:
geçersiz ekran()
cout << "I am in Base class" << endl;
;
sınıf Derived_Class:genel Base_Class
halka açık:
geçersiz ekran()
cout << "I am in Derived class"
Örnek 2
Bu örnekte, display() fonksiyonunu temel sınıfta sanal bir fonksiyon olarak tanımladık. Bir önceki programdan tek farkı, temel sınıfta “void display()” önüne sanal bir anahtar kelime eklememizdir.
Şimdi, çıktıyı görürseniz, türetilmiş sınıf işlevinin çağrıldığını belirten “Türetilen sınıftayım” yazdırır.
Temel sınıftaki sanal anahtar kelime (sanal işlev), bir nesne için doğru işlevin çağrıldığından emin olmaktan sorumludur.
#Dahil etmekad alanı std kullanarak;
sınıf Temel_Sınıf
halka açık:
sanal boşluk ekranı()
cout << "I am in Base class" << endl;
;
sınıf Derived_Class:genel Base_Class
halka açık:
geçersiz ekran()
cout << "I am in Derived class"
Örnek 3
Bu, sanal bir işlevin başka bir örneğidir. Aşağıdaki programda görebileceğiniz gibi, bir temel sınıf tanımladık, i.e., Hayvan. İki türetilmiş sınıf vardır: Dog ve Cow. Temel sınıfta eat() fonksiyonunu sanal olarak tanımladık, i.e., Hayvan. Daha sonra türetilmiş sınıflar olan Dog ve Cow'da eat() işlevini yeniden tanımladık. main() işlevinde, temel sınıfın bir işaretçisine sahibiz, i.e., Animal ve ardından türetilmiş bir sınıf olan Dog eklendi. Bu nedenle, temel sınıf işaretçisini kullanarak eat() işlevini çağırdığımızda, eat() işlevinin türetilmiş sınıf sürümünü çağırabiliriz.e., Dog sınıfından eat() işlevi. Benzer şekilde, Cow sınıfı nesnesini eklediğimizde, eat() fonksiyonunun türetilmiş sınıf versiyonunu çağırabiliriz, i.e., Cow sınıfından eat() işlevi. Bu davranışı aşağıdaki çıktıda açıkça görebilirsiniz.
#Dahil etmekad alanı std kullanarak;
sınıf Hayvan
halka açık:
sanal boşluk yemek()
cout << "Animal - base class - undefined eating behavior." << endl;
;
sınıf Köpek:genel Hayvan
halka açık:
geçersiz yemek()
cout << "Dog - eat non-veg!" << endl;
;
sınıf İnek:genel Hayvan
halka açık:
geçersiz yemek()
cout << "Cow - eat veg!"
a_ptr->yemek();
0 döndür;
Sonuç
Bu yazımda C dilinde sanal fonksiyon kavramını anlattım++. C++, farklı polimorfizm türlerini destekler - statik polimorfizm ve dinamik polimorfizm. Sanal bir fonksiyon yardımıyla çalışma zamanı/dinamik polimorfizmi elde edebiliriz. Bu yazıda sadece sanal fonksiyon kavramına ve çalışma zamanı polimorfizminin nasıl elde edileceğine baktık. Sanal işlevi açıklamak için üç çalışma örneği açıkladım.