final
- C++ kursu
- Orta seviye
- Ders 17/116
- 4 dk
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.
Başlangıç kodu
#include <iostream>
// Animal ve Dog sınıflarını tanımla
int main() {
// Dog örneği oluştur ve speak çağır
return 0;
}Örnek çözüm
#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;
}Beklenen çıktı
Hav
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Kullanımı rolüne eşle
| Kavram | Anlamı |
|---|---|
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 |
2 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 Doğru cevap
- Dog'un yapıcısı gizlenir
Açıklama: final, Dog'tan başka sınıf türetilmesini engeller.
3 final anahtar kelimesini yaz
class Dog ____ : public Animal { };
class Dog final : public Animal { };
Açıklama: final, Dog'tan miras alınmasını engeller.