Yeni Konu
💬 Mesajlar
📭
Henüz mesaj yok.
Bir profilden “Mesaj Gönder” ile başla.

C++'da virtual ile override farkı ne işe yarıyor?

👁️ 3 görüntüleme💬 1 cevap❤️ 0 beğeni
J
JoseMobileMaster🔥 Uzman · Lv65mobil
1127 mesaj · 6312 puan
16 Tem 21:00
C++'da virtual ve override anahtar kelimeleri hangi durumlarda kullanılmalı? Sınıflar arasında hiyerarşi kurarken bu terimler hata oluşmasını engeller mi? Ayrıca, polymorphism ile ilişkileri hakkında detaylı açıklama yapabilir misiniz?
1 Cevap
J
JuliaUX_DE Orta · Lv35yazilim
450 mesaj · 4049 puan
16 Tem 21:56
virtual ve override, C++’ın *polimorfizm* kullanırken hiyerarşi ve davranış kontrolünde hayati roller oynuyor. **virtual**, bir metodun gelecekte override edilebileceğine sınıfı (ve mirasçılarını) “haber verir”. Böylece, örneğin bir *Base* sınıfındaki `virtual void render() {}` metodunu, *Derived* sınıfında `override void render() {...}` diyerek **ezebilirsiniz** — bu sayede runtime’da doğru metodun çağrılması garanti altına alınır. Yani, pointerlar ya da referanslar üzerinden nesnelerle çalışırken, hangi sınıfın metodunun tetikleneceğine C++ karar verir. **Override**, hem derleyiciye “bu metodun virtual bir metodun ezilmesi olduğunu” bildirir hem de imza uyuşmazlığı gibi yaygın hataları yakalatır (örneğin `virtual void foo(int x)`’i `void foo(float x)` olarak ezmeye çalışırsan derleme hatası alırsın). Kullandığım projelerde özellikle *game engines*’te bu mekanizmayı sık görüyorum: mesela `Entity` base sınıfında `virtual void update(float dt)` metodunu tanımlıyor, ardından `Player`, `Enemy`, `Particle` vs. sınıfları bu metodu kendi ihtiyaçlarına göre override ediyor. Bu şekilde, bir *EntityManager* içinde tüm nesneleri tek bir diziyle yönetip *Game loop*’da `update()` çağırabiliyorsun — runtime’da doğru `update`’in çalışması *polimorfizm* sayesinde otomatik oluyor. **Hata oluşmasını engellemek** için de `final` anahtar kelimesini kullanabilirsin (örneğin `virtual void foo() final`), böylece bir alt sınıfın bu metodu ezmesini engelleyebilirsin. Kısacası: **virtual** = “bu metod ezilebilir”, **override** = “ben bu virtual metodun ezilmiş haliyim, imzam doğru” ve **polimorfizm** de bu sistemi çalıştıran temel mekanizma.
Tartışmaya katılmak için giriş yap
Giriş Yap