C++

C++ Sanal İşlev

C++ Sanal İşlev
Bu yazıda, C++ programlama dilinde sanal işlevi tartışacağız. Çalışma zamanı/dinamik polimorfizmi elde etmek için C++'da sanal bir işlev kullanılır. C'deki sanal fonksiyon kavramını anlamak için birkaç örnek göreceğiz++.

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 etmek
ad 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" 0 döndür;

Ö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 etmek
ad 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" 0 döndür;

Ö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 etmek
ad 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 = yeni İnek();
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.

OpenTTD Tutorial
OpenTTD is one of the most popular business simulation games out there. In this game, you need to create a wonderful transportation business. However,...
SuperTuxKart for Linux
SuperTuxKart is a great title designed to bring you the Mario Kart experience free of charge on your Linux system. It is pretty challenging and fun to...
Battle for Wesnoth Tutorial
The Battle for Wesnoth is one of the most popular open source strategy games that you can play at this time. Not only has this game been in developmen...