# 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**

```cpp
#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**

```cpp
#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**

```cpp
#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**

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.yavuzlar.org/egitim/c-plus-plus/3.0-siniflar/3.7-inheritance.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
