C++
final
final ile mirası engellemeyi öğrenirsin.
final
C++11'den beri final anahtar kelimesi bir sınıfın daha fazla miras alınamamasını ya da bir fonksiyonun daha fazla geçersiz kılınamamasını sağlar. Bu, sınıf hiyerarşisini kapatmak veya kritik fonksiyonların değişmesini önlemek için kullanılır.
Sınıf için: class Dog final : public Animal { };. Artık Puppy : public Dog yazamazsın; derleme hatası alırsın. Fonksiyon için: void speak() override final { }. Bu, Dog'dan türeyen bir sınıfın speak'i tekrar geçersiz kılamayacağı anlamına gelir. final, tasarım kararını açıkça belgelemeye yarar.
Neden final kullanılır?
final iki temel nedenle kullanılır. Birincisi, performans: temel sınıftaki tüm virtual fonksiyonlar final ise derleyici bazen sanal çağrıları doğrudan çağrıya çevirebilir. İkincisi, tasarım: bir sınıfın genişletilmesini kasıtlı olarak engellemek isteyebilirsin.
Örnek: bir şifre doğrulama sınıfı class Authenticator final { ... }; olarak kapatılırsa, kimse güvenlik açığı oluşturacak bir türev yazamaz. Benzer şekilde, bir fonksiyon final ise alt sınıfların onu değiştirip beklenmeyen davranış üretmesi önlenir. Bu, kütüphane tasarımcılarının sözleşmeyi korumasına yardımcı olur.
Uygulama Dog sınıfını final yap
Animal sınıfını tanımla: public: altında virtual void speak() { std::cout << "Ses"; }. Dog sınıfını Animal'dan final olarak türet: class Dog final : public Animal { public: void speak() override { std::cout << "Hav"; } };. main içinde Dog dog; oluştur ve dog.speak() çağır.
Örnek çözümü göster
#include <iostream>
class Animal {
public:
virtual void speak() {
std::cout << "Ses";
}
};
class Dog final : public Animal {
public:
void speak() override {
std::cout << "Hav";
}
};
int main() {
Dog dog;
dog.speak();
return 0;
}
Kendini test et
-
Kullanımı rolüne eşle
- class Dog final
- Sınıf mirası kapalı
- void speak() final
- Fonksiyon geçersiz kılma kapalı
- override final
- Geçersiz kılma ve kilitleme
- class Dog : public Animal
- Miras açık
-
class Dog final : public Animal { }; tanımından sonra ne olur?
class Dog final : public Animal { };
- Dog artık Animal'dan miras alamaz
- Dog'un üyeleri silinir
- Dog'tan yeni sınıf türetilemez
- Dog'un yapıcısı gizlenir
Cevabı göster
Dog'tan yeni sınıf türetilemez — final, Dog'tan başka sınıf türetilmesini engeller.
-
final anahtar kelimesini yaz
class Dog ____ : public Animal { };
Cevabı göster
class Dog final : public Animal { };
Sıradaki ders: Özet - Miras alma