CodeBlanks Logo Icon CodeBlanks

virtual

virtual ile sanal metot ve polimorfizmi öğrenirsin.

virtual

Bir temel sınıfın üye fonksiyonunu virtual yaparak, türetilmiş sınıfın kendi sürümünü çalıştırabilmesini sağlarsın. Buna çok biçimlilik (polymorphism) denir. İşaretçi veya başvuru üzerinden çağrıldığında, nesnenin gerçek türüne bakılır.

Örnek: class Animal { public: virtual void speak() { std::cout << "Ses"; } };. Dog bunu yeniden tanımlar: void speak() { std::cout << "Hav"; }. Animal* a = &dog; a->speak(); çağrısı Hav yazdırır; çünkü virtual sayesinde dog'un gerçek türü seçilir. virtual yoksa Ses yazdırılırdı.

İşaretçi ile çağrı

Çok biçimlilik çalışma zamanında gerçekleşir; bunun için bir temel sınıf işaretçisi veya başvurusu gerekir. Doğrudan nesne üzerinden çağrı yapılamaz; çünkü derleyici statik türü kullanır. İşaretçide -> işareti üye erişimi için kullanılır.

Örnek: Dog dog; Animal* a = &dog; a->speak();. Burada a bir Animal işaretçisidir ama dog nesnesini gösterir. virtual sayesinde Dog::speak çağrılır. İşaretçi yerine başvuru da kullanılabilir: Animal& r = dog; r.speak();. İkisi de aynı sonucu verir.

Uygulama virtual speak ile çok biçimlilik

Animal sınıfını tanımla: public: altında virtual void speak() { std::cout << "Ses"; }. Dog sınıfını Animal'dan türet ve void speak() { std::cout << "Hav"; } ile yeniden tanımla. main içinde Dog dog; oluştur, Animal* a = &dog; al ve a->speak() çağır.

Başlangıç kodu

main.cpp
#include <iostream>

// Animal ve Dog sınıflarını tanımla

int main() {
    // Dog oluştur, Animal* ile speak çağır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

class Animal {
public:
    virtual void speak() {
        std::cout << "Ses";
    }
};

class Dog : public Animal {
public:
    void speak() {
        std::cout << "Hav";
    }
};

int main() {
    Dog dog;
    Animal* a = &dog;
    a->speak();
    return 0;
}

Beklenen çıktı

Hav

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 virtual anahtar kelimesini yaz

Soru
class Animal { public: ____ void speak() { } };
Cevap
class Animal { public: virtual void speak() { } };

Açıklama: virtual, speak fonksiyonunun yeniden tanımlanabilir olmasını sağlar.

2 Animal* a = &dog; a->speak(); çağrısı ne yazdırır? (speak virtual, Dog::speak "Hav" yazdırır)

main.cpp
Animal* a = &dog;
a->speak();
  • Ses
  • Derleme hatası
  • Hiçbir şey
  • Hav Doğru cevap

Açıklama: virtual sayesinde dog'un gerçek türü seçilir ve Hav yazdırılır.

3 Parçayı rolüne eşle

Kavram Anlamı
virtual Çok biçimlilik sağlar
-> İşaretçi ile üye erişimi
Animal* Temel sınıf işaretçisi
&dog İşaretçinin gösterdiği nesne

Orta seviye bölümündeki tüm dersler