3.7 Inheritance

Kalıtım, nesne yönelimli programlamanın temel özelliklerinden biridir ve bir sınıfın (alt sınıf) başka bir sınıftan (üst sınıf) özellikleri ve davranışları miras almasını sağlar. Bu sayede, kod tekrarı azaltılır ve yazılım geliştirme süreci daha verimli hale gelir.

1. Basit Kalıtım (Single Inheritance)

Bir sınıfın yalnızca bir üst sınıftan özellikleri miras almasıdır.

Örnek

#include <iostream>
using namespace std;

class Hayvan {
public:
    void sesCikar() {
        cout << "Hayvan ses çıkarıyor!" << endl;
    }
};

class Kedi : public Hayvan {
public:
    void miyavla() {
        cout << "Kedi miyavlıyor!" << endl;
    }
};

int main() {
    Kedi kedi;
    kedi.sesCikar(); // Üst sınıftan miras alınan metot
    kedi.miyavla(); // Alt sınıfa ait metot
    return 0;
}

2. Çoklu Kalıtım (Multiple Inheritance)

Bir sınıfın birden fazla üst sınıftan miras almasıdır. C++ bu özelliği destekler.

Örnek

#include <iostream>
using namespace std;

class Uyanik {
public:
    void uyan() {
        cout << "Uyanık!" << endl;
    }
};

class Temiz {
public:
    void temizle() {
        cout << "Temiz!" << endl;
    }
};

class Ogrenci : public Uyanik, public Temiz {
public:
    void dersCalis() {
        cout << "Ders çalışıyor!" << endl;
    }
};

int main() {
    Ogrenci ogrenci;
    ogrenci.uyan(); // Uyanık sınıfından miras alınan metot
    ogrenci.temizle(); // Temiz sınıfından miras alınan metot
    ogrenci.dersCalis(); // Ogrenci sınıfına ait metot
    return 0;
}

3. Çok Aşamalı Kalıtım (Multilevel Inheritance)

Bir sınıfın, başka bir sınıftan miras alarak yeni bir alt sınıf oluşturmasıdır.

Örnek

#include <iostream>
using namespace std;

class Hayvan {
public:
    void sesCikar() {
        cout << "Hayvan ses çıkarıyor!" << endl;
    }
};

class Kedi : public Hayvan {
public:
    void miyavla() {
        cout << "Kedi miyavlıyor!" << endl;
    }
};

class SarmanKedi : public Kedi {
public:
    void sarmanMiyavla() {
        cout << "Sarman kedi özel bir miyav çıkarıyor!" << endl;
    }
};

int main() {
    SarmanKedi sarmanKedi;
    sarmanKedi.sesCikar(); // Üst sınıftan miras alınan metot
    sarmanKedi.miyavla(); // Kedi sınıfından miras alınan metot
    sarmanKedi.sarmanMiyavla(); // SarmanKedi sınıfına ait metot
    return 0;
}

Kalıtım Erişimi (Inheritance Access)

Kalıtımda, erişim belirleyicileri (public, protected, private) kullanılarak alt sınıfların üst sınıflara erişim şekli belirlenir:

  • Public Kalıtım: Üst sınıftaki public ve protected üyeler alt sınıfta aynı erişimle görünür. (Örnek: class Kedi : public Hayvan)

  • Protected Kalıtım: Üst sınıftaki public ve protected üyeler alt sınıfta protected olarak görünür. (Örnek: class Kedi : protected Hayvan)

  • Private Kalıtım: Üst sınıftaki public ve protected üyeler alt sınıfta private olarak görünür. (Örnek: class Kedi : private Hayvan)

Örnek

#include <iostream>
using namespace std;

class Hayvan {
public:
    void sesCikar() {
        cout << "Hayvan ses çıkarıyor!" << endl;
    }
protected:
    void koru() {
        cout << "Koru!" << endl;
    }
private:
    void gizli() {
        cout << "Bu bir gizli metot!" << endl;
    }
};

class Kedi : public Hayvan {
public:
    void sesCikarKedi() {
        sesCikar(); // Public erişim
        koru(); // Protected erişim
        // gizli(); // Hata! Private erişim
    }
};

int main() {
    Kedi kedi;
    kedi.sesCikarKedi(); // Hayvan sınıfından miras alınan metotlar
    return 0;
}

Sonuç

Kalıtım, C++ dilinde nesne yönelimli programlamanın önemli bir parçasıdır. Kodun yeniden kullanımını artırır, yazılım geliştirme sürecini hızlandırır ve daha iyi bir organizasyon sağlar. Kalıtım erişimi sayesinde, alt sınıfların üst sınıfların üyelerine erişimi kontrol edilebilir. C++'da kalıtımın etkili bir şekilde kullanılması, yazılım projelerinin yönetimini ve bakımını kolaylaştırır.

Last updated