CodeBlanks Logo Icon CodeBlanks

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.

Başlangıç kodu

main.cpp
#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

main.cpp
#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?

main.cpp
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

Soru
class Dog ____ : public Animal { };
Cevap
class Dog final : public Animal { };

Açıklama: final, Dog'tan miras alınmasını engeller.

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