> For the complete documentation index, see [llms.txt](https://docs.yavuzlar.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.yavuzlar.org/egitim/c-plus-plus/3.0-siniflar/3.2-siniflar-ve-objeler.md).

# 3.2 Sınıflar ve Objeler

C++'da sınıflar, nesne yönelimli programlamanın temel yapı taşlarıdır. Sınıflar, belirli bir veri kümesi ve bu verilere yönelik işlevler (metotlar) içeren bir şablondur. Nesneler ise bu sınıfların örnekleridir. Her nesne, sınıfın tanımladığı özellikleri ve işlevleri barındırır.

**Sınıf Tanımı**

Bir sınıf tanımlarken, o sınıfa ait değişkenleri (özellikler) ve fonksiyonları (metotlar) belirleriz. Sınıfın içeriği, "public", "private" veya "protected" erişim belirleyicileri ile düzenlenir.

```cpp
class Araba {
private:
    std::string marka; // Özellik
    int yil; // Özellik

public:
    // Constructor (Yapıcı Metot)
    Araba(std::string m, int y) : marka(m), yil(y) {}

    // Metotlar
    void bilgiGoster() {
        std::cout << "Marka: " << marka << ", Yıl: " << yil << std::endl;
    }
};
```

**Nesne Oluşturma**

Bir sınıf tanımlandıktan sonra, bu sınıftan nesneler oluşturabiliriz. Aşağıdaki örnekte, `Araba` sınıfından `araba1` ve `araba2` adında iki nesne oluşturulmuştur.

```cpp
int main() {
    // Nesne oluşturma
    Araba araba1("Toyota", 2020);
    Araba araba2("Ford", 2019);

    // Metot çağrısı
    araba1.bilgiGoster();
    araba2.bilgiGoster();

    return 0;
}
```

**Sınıfın Özellikleri ve Metotları**

Sınıflar, özelliklerin yanı sıra metotlar da içerebilir. Metotlar, sınıfa ait verilere erişmek ve bu veriler üzerinde işlemler yapmak için kullanılır. Aşağıdaki örnekte `Araba` sınıfının bir `bilgiGoster()` metodu bulunmaktadır.

```cpp
void bilgiGoster() {
    std::cout << "Marka: " << marka << ", Yıl: " << yil << std::endl;
}
```

**Constructor ve Destructor**

Constructor (yapıcı metot), bir nesne oluşturulduğunda otomatik olarak çağrılan bir metottur. Sınıfın özelliklerini başlatmak için kullanılır. Destructor (yıkıcı metot) ise bir nesne bellekten silindiğinde çağrılır ve kaynakları serbest bırakmak için kullanılır.

```cpp
// Yapıcı metot
Araba(std::string m, int y) : marka(m), yil(y) {}

// Yıkıcı metot
~Araba() {
    // Temizlik işlemleri
}
```

#### Örnek

Aşağıdaki örnekte `Araba` sınıfı oluşturulmuş ve bu sınıf üzerinden nesneler oluşturulmuştur:

```cpp
#include <iostream>
#include <string>

class Araba {
private:
    std::string marka;
    int yil;

public:
    Araba(std::string m, int y) : marka(m), yil(y) {}

    void bilgiGoster() {
        std::cout << "Marka: " << marka << ", Yıl: " << yil << std::endl;
    }
};

int main() {
    Araba araba1("Toyota", 2020);
    Araba araba2("Ford", 2019);

    araba1.bilgiGoster();
    araba2.bilgiGoster();

    return 0;
}
```

#### Sonuç

C++'da sınıflar ve nesneler, veri yapıları ve işlevsellikleri bir araya getirerek daha karmaşık ve ölçeklenebilir uygulamalar geliştirmeye olanak tanır. Sınıflar sayesinde, programcılar kodlarını daha düzenli ve anlaşılır bir şekilde organize edebilirler. Bu, yazılımın bakımını ve genişletilmesini kolaylaştırır.
