CodeBlanks Logo Icon CodeBlanks

override

override ile metotları yeniden tanımlamayı öğrenirsin.

override

C++11'den beri türetilmiş sınıfta yeniden tanımlanan fonksiyona override anahtar kelimesi eklenebilir. Bu, derleyiciye "bu fonksiyon temel sınıftaki virtual fonksiyonu geçersiz kılıyor" mesajı verir. İmza uyuşmazsa derleme hatası alınır; bu da sessiz hataları önler.

Örnek: class Dog : public Animal { public: void speak() override { std::cout << "Hav"; } };. Burada override, speak'in temel sınıftaki virtual void speak() ile aynı imzaya sahip olduğunu garanti eder. Yanlışlıkla void speek() yazarsan, override bunu yakalar ve derleme hatası verir; çünkü temel sınıfta speek yoktur.

İmza uyumu

override işaretlenen fonksiyon, temel sınıftaki virtual fonksiyonla aynı imzaya sahip olmalıdır: aynı ad, aynı parametreler, aynı const durumu. İmza farklıysa derleyici hata verir. Bu, yanlışlıkla yeni bir fonksiyon oluşturmayı engeller.

Örnek: temel sınıfta virtual int area() const varsa, türetilmiş sınıfta int area() override yazarsan derleme hatası alırsın; çünkü const eksik. Doğrusu: int area() const override. override kullanmazsan bu fark sessizce yeni bir fonksiyon olarak kalır ve çok biçimlilik çalışmaz.

Uygulama Dog speak'i override ile yeniden tanımla

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() override { 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() override {
        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 Anahtar kelimeyi rolüne eşle

Kavram Anlamı
virtual Yeniden tanımlanabilir yapar
override Geçersiz kılmayı işaretler
public Dışarıdan erişime açar
class Sınıf tanımını başlatır

2 override anahtar kelimesini yaz

Soru
void speak() ____ { std::cout << "Hav"; }
Cevap
void speak() override { std::cout << "Hav"; }

Açıklama: override, temel sınıf fonksiyonunu geçersiz kıldığını belirtir.

3 override kullanmanın temel yararı nedir?

main.cpp
void speak() override { }
  • İmza uyumsuzluğunu derleme hatası yapar Doğru cevap
  • Fonksiyonu private yapar
  • Yeni bir fonksiyon tanımlar
  • Fonksiyonu daha hızlı yapar

Açıklama: override, imza uyuşmazsa derleme hatası verir.

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