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


---

# 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.2-siniflar-ve-objeler.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.
