Sanal İşlevler ve vtable
Sanal işlevlerle çalışma zamanı çok biçimliliğini uygulayın ve vtable kavramını inceleyin
Sanal İşlevler ve vtable, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
Statik ve Dinamik Bağlama
Varsayılan olarak üye çağrıları statik olarak bağlanır — derleyici, işlevi bildirilmiş türe göre seçer. virtual işlevlerde çağrı, gerçek türe göre dinamik olarak bağlanır.
Sanal İşlev Bildirme
İşlevi temel sınıfta virtual olarak işaretleyin. Türetilmiş sınıflar bu işlevi geçersiz kılabilir.
class Shape {
public:
virtual double area() const = 0; // pure virtual
virtual ~Shape() = default;
};
class Circle : public Shape {
double r_;
public:
Circle(double r) : r_(r) {}
double area() const override { return 3.14159 * r_ * r_; }
};override Belirteci
Türetilmiş sınıf yöntemlerine override ekleyin. Derleyici, işlevin gerçekten bir sanal işlevi geçersiz kıldığını doğrular ve imzadaki yazım hatalarını yakalar.
final Belirteci
final, daha fazla geçersiz kılmayı önler. Kalıtım alınmaması gereken sınıflarda veya yeniden geçersiz kılınmaması gereken yöntemlerde kullanın.
class Concrete final : public Base { /* ... */ };
class Base {
virtual void f() final; // cannot be overridden
};Temel Sınıf İşaretçisi Üzerinden Çağırma
Çok biçimliliğin gücü: temel sınıf işaretçisi, doğru türetilmiş sınıf yöntemine yönlendirme yapabilir.
Shape* s = new Circle(3.0);
std::cout << s->area(); // 28.27... (Circle::area)
delete s;vtable Kavramı
Her çok biçimli sınıfın gizli bir işlev tablosu vardır — bu, işlev işaretçilerinden oluşan bir tablodur. Her nesne, sınıfının işlev tablosuna yönelik gizli bir işaretçi (vptr) tutar.
Sanal Çağrıların Maliyeti
Sanal çağrı, işlev tablosu üzerinden bir ek dolaylı erişim gerektirir. Çoğu kodda ihmal edilebilir düzeydedir. Ölçüm sonucunda darboğaz olduğu görülürse iç döngülerde kullanmaktan kaçının.
Yalnızca Sanal İşlevler
Bir işlevi yalnızca sanal yapmak için sonuna = 0 ekleyin. Türetilmiş sınıflar, örneklenebilir olabilmek için bunu geçersiz kılmalıdır. Sınıf soyut hâle gelir.
Sanal Yok Ediciler
Bir sınıfın herhangi bir sanal işlevi varsa veya temel sınıf işaretçisi üzerinden silinmesi amaçlanıyorsa ona sanal bir yok edici verin. Aksi hâlde türetilmiş sınıfın yok edicisi çalışmaz.
class Base {
public:
virtual ~Base() = default; // safe to delete through Base*
};Akıllı İşaretçilerle Çok Biçimlilik
Çok biçimli nesneleri temel türe akıllı işaretçiler üzerinden tutun. Akıllı işaretçi, yok etme işlemini doğru biçimde yönetir.
std::unique_ptr<Shape> s = std::make_unique<Circle>(3.0);Kırpma Yeniden Ele Alınıyor
Türetilmiş bir nesnenin, temel sınıfı bekleyen bir işleve değer olarak geçirilmesi türetilmiş bölümü kırpar. Çok biçimli bağımsız değişkenler için başvurular veya işaretçiler kullanın.
Performans Tercihi
Sanal işlevler, küçük bir çalışma zamanı maliyeti karşılığında esneklik sağlar. Şablonlar, çalışma zamanı maliyeti olmadan derleme zamanı çok biçimliliği sunar — çok biçimliliğin çalışma zamanında gerekip gerekmediğine göre seçim yapın.
Hızlı Kontrol
Çok biçimli bir temel sınıf neden virtual bir yok ediciye sahip olmalıdır?
Özet
Sanal işlevler, sınıf başına bir işlev tablosu aracılığıyla çalışma zamanı çok biçimliliğini etkinleştirir. Geçersiz kılmaları override ile işaretleyin ve daha fazla kalıtımı final ile önleyin. Çok biçimli temel sınıflara her zaman sanal bir yok edici verin.
Sıkça Sorulan Sorular
“Sanal İşlevler ve vtable” dersi ücretsiz mi?
Evet — “Sanal İşlevler ve vtable” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“Sanal İşlevler ve vtable” dersinde ne öğreneceğim?
Sanal işlevlerle çalışma zamanı çok biçimliliğini uygulayın ve vtable kavramını inceleyin C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Sanal İşlevler ve vtable” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Tekli ve Çoklu Kalıtım
- Sanal İşlevler ve vtable
- Soyut Sınıflar ve Saf Sanal Metotlar
- Kalıtım ve Bileşim Ödünleşimleri