C++
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
Anahtar kelimeyi rolüne eşle
- 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
-
override anahtar kelimesini yaz
void speak() ____ { std::cout << "Hav"; }
Cevabı göster
void speak() override { std::cout << "Hav"; }
-
override kullanmanın temel yararı nedir?
void speak() override { }
- İmza uyumsuzluğunu derleme hatası yapar
- Fonksiyonu private yapar
- Yeni bir fonksiyon tanımlar
- Fonksiyonu daha hızlı yapar
Cevabı göster
İmza uyumsuzluğunu derleme hatası yapar — override, imza uyuşmazsa derleme hatası verir.
Sıradaki ders: Base constructor