Sanal ve Saf Sanal İşlev Arasındaki Fark

Yazar: Laura McKinney
Yaratılış Tarihi: 2 Nisan 2021
Güncelleme Tarihi: 11 Mayıs Ayı 2024
Anonim
Kripto Para ve Dijital Para Arasındaki Farklar Ne? Kripto Paranın Bilinmeyenleri
Video: Kripto Para ve Dijital Para Arasındaki Farklar Ne? Kripto Paranın Bilinmeyenleri

İçerik


Sanal işlev ve saf sanal işlev, hem çalışma zamanı polimorfizminin kavramlarıdır. ‘Arasındaki temel farksanal işlev ' ve 'Saf sanal işlev' “sanal fonksiyon” un temel sınıftaki tanımına sahip olması ve miras alınan türetilmiş sınıfların onu yeniden tanımlamasıdır. Saf sanal fonksiyonun temel sınıfta tanımı yoktur ve miras alınan türetilmiş sınıfların hepsini yeniden tanımlamaları gerekir.

Bununla birlikte, sanal işlev aynı zamanda dinamik gönderme ve çalışma zamanı gönderimi olarak da adlandırılır, çünkü çağrılan işlev, kullanılan nesnenin türüne göre çalışma zamanında belirtilir.

Polimorfizm, hem C ++ hem de Java tarafından desteklenir. Java'da, sanal işlev C ++ terimi olduğundan “sanal işlev” yerine “geçersiz kılma” terimi kullanılır.

  1. Karşılaştırma Tablosu
  2. Tanım
  3. Anahtar Farklılıklar
  4. Sonuç

Karşılaştırma Tablosu

Karşılaştırma için temelSanal işleviSaf Sanal İşlev
TemelSanal fonksiyonun temel sınıfta tanımları vardır.Saf Sanal İşlev'in temel sınıfta tanımı yoktur.
deklarasyonsanal işlev_adı (parametre_listesi) {. . . . .};sanal işlev_adı (parametre_listesi) = 0;
Türetilmiş sınıfTüm türetilmiş sınıflar, temel sınıfın sanal işlevini geçersiz kılabilir veya olmayabilir.Türetilmiş tüm sınıflar, temel sınıfın sanal işlevini geçersiz kılmalıdır.
Etki, tesir

Sanal fonksiyonlar doğada hiyerarşiktir; Herhangi bir türetilmiş sınıf, temel sınıfın sanal işlevini geçersiz kılmazsa derlemeyi etkilemez.Türetilmiş tüm sınıflar, temel sınıfın sanal işlevini geçersiz kılmazsa, derleme hatası ortaya çıkar.
Soyut sınıfHiçbir kavram.Bir sınıf en az bir saf sanal fonksiyon içeriyorsa, o zaman soyut olarak ilan edilir.


Sanal İşlev Tanımı

sanal işlev temel sınıfın üye işlevidir ve temel sınıfı miras alan türetilmiş sınıflar tarafından yeniden tanımlanır. Miras kalan tüm türetilmiş sınıfların sanal işlevi yeniden tanımlaması gerekmemektedir, sadece işlevini gerektirebilecek türetilmiş sınıflar tarafından yeniden tanımlanmıştır. Öncelikle anahtar sınıftaki fonksiyonun temel sınıfta bildirilmesi ile sanal bir fonksiyon yaratılır. 'sanal'.

Deklarasyon:

sınıf tabanı {public: sanal tür funt_name (parametre listesi) {. . . }};

Devralınan türetilmiş sınıflar, herhangi bir "sanal" anahtar kelime olmadan sanal işlevi yeniden tanımlayabilir. Türetilmiş sınıflar, görevi yerine getirmek için sanal işlevi yeniden tanımlar. Sanal işlev türetilmiş sınıflarda yeniden tanımlandığından, aynı işlevin birden fazla şekline sahibiz. Şimdi, işlevin hangi sürümünün çağrılmakta olduğu, bu işlevin ne tür bir nesneye çağrılacağına bağlıdır.


Çok düzeyli kalıtım

Sanal işlevi temel sınıfından miras alan türetilmiş bir sınıfın, başka bir türetilmiş sınıf için temel sınıf olarak kullanıldığı çok düzeyli kalıtımda, sanal işlev yine de geçersiz kılınabilir. Dolayısıyla, bir sanal işlev miras alındığında, sanal doğası da miras alınır.

Sanal işlevler de, doğada hiyerarşiktir, yani türetilmiş bir sınıf, temel sınıftan miras alınan sanal işlevi geçersiz kılmaz / yeniden tanımlamazsa ve türetilmiş bir sınıfın nesnesi bu sanal işlevi çağırdığında, temel sınıf tarafından tanımlanan sanal işlev çağrılır.

Saf Sanal Fonksiyonun Tanımı

Yukarıda görüldüğü gibi, türetilmiş sınıf sanal işlevi geçersiz kılmazsa, temel sınıf tarafından tanımlanan sanal işlev kullanılır. Ancak, temel sınıfın kendisi sanal işlevi tanımlamazsa ne olur. Çoğu zaman, temel sınıfın sanal işlev için bir tanımı yoktur veya bazen türetilmiş tüm sınıfların sanal işlevi geçersiz kılması gerektiğini istersiniz.

Bu iki durumla başa çıkmak için, C ++ “kavramını desteklemektedir.Saf Sanal İşlev“. Temel sınıfta “saf sanal işlev” bildirilir, ancak temel sınıfta tanımı yoktur. Saf sanal işlev aşağıdaki gibi bildirilir.

sanal tür funct_name (parametre_listesi) = 0;

Temel sınıftaki sanal bir fonksiyon ne zaman "saf" yapılırsa, o zaman türetilen her sınıf temel sınıfın saf sanal fonksiyonunu zorunlu olarak geçersiz kılmalıdır. Türetilmiş sınıf, temel sınıfın saf sanal işlevini geçersiz kılmazsa, derleme hatasına neden olur.

Soyut sınıf

En az bir saf işlev içeren sınıfa "soyut sınıf" denir. Soyut sınıfların hiçbir nesnesi oluşturulamaz, ancak soyut sınıflara referanslar ve işaretçiler oluşturabilirsiniz. Soyut sınıfların üyelerine, soyut temel sınıfı miras alan türetilmiş sınıfların nesnesi yoluyla erişilebilir.

Özet bildirmek istediğiniz bir sınıf, anahtar kelimeyi kullanın. 'soyut, Özet' önünde 'sınıf' Anahtar kelime.

// örneğin soyut sınıf sınıfı adı {. . sanal tür funct_name (parametre_listesi) = 0; . . };

  1. Sanal fonksiyonlar kesinlikle temel sınıfta tanımlanır ve türetilmiş sınıfta yeniden tanımlanır (geçersiz kılınır). Öte yandan, temel sanal sınıf temel sınıf özellikle temel sınıfta tanımlanmadı
  2. Gerektiğinde türetilmiş sınıf, sanal işlevi yeniden tanımlamak (geçersiz kılmak) iken, saf sanal işlev durumunda türetilmiş sınıf, saf sanal işlevi kesinlikle yeniden tanımlamak zorundadır.
  3. Türetilmiş sınıf, sanal işlevi yeniden tanımlayamaz (geçersiz kılamaz), temel sınıfın sanal işlevini kullanabilir. Tersine, türetilmiş bir sınıf saf sanal işlevi geçersiz kılmazsa, derleme hatası oluşur.
  4. Sanal işlevi içeren temel sınıf başlatılabilir, yani nesnesi oluşturulabilir. Karşıt olarak, saf sanal fonksiyon içeren temel sınıf, yani bir soyut sınıf tam olarak tanımlanmadığından, bir soyut sınıf başlatılamaz.

Not:
"Sanal fonksiyon" ve "saf sanal fonksiyon" prototipi program boyunca aynı kalır.

Sonuç:

'Sanal işlevler' ve 'saf sanal işlev', 'sanal işlevlerde olduğu gibi,' türetilmiş sınıfın sanal işlevi yeniden tanımlaması gerekmez ve tüm türetilmiş sınıfın sanal işlevi yeniden tanımlamasını isteriz; işlevi en iyi orada geçerlidir.