override
- C++ kursu
- Orta seviye
- Ders 15/116
- 5 dk
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
#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
#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
void speak() ____ { std::cout << "Hav"; }
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?
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.