Sobes.tech
Junior

Sabit ve sabit olmayan metodlar hakkında ne biliyorsun?

sobes.tech yapay zeka

AI'dan gelen yanıt

C++'ta sabit metodlar (const methods), parametre listesinden sonra const anahtar kelimesi ile ilan edilen sınıf metodlarıdır.

class MyClass {
public:
    void nonConstMethod();         // Sabit olmayan metod
    void constMethod() const;      // Sabit metod
};

Parametre listesinden sonra gelen const anahtar kelimesi, metodun çağrıldığı nesnenin durumunu değiştirmeyeceğini garanti eder. Bu, sabit bir metodun içinde:

  • Nesnenin statik olmayan veri üyelerinin değiştirilemeyeceği anlamına gelir.
  • Sadece aynı nesnenin diğer sabit metodlarının çağrılabileceği anlamına gelir.

Sabit metodların amacı:

  1. Güvenlik: Nesne durumunun kazara değiştirilmesini önler.
  2. Sabit nesnelerle kullanım: Sabit nesneler (const ile ilan edilenler) sadece sabit metodları çağırabilir. Sabit olmayan metodlar erişilebilir değildir.
  3. Aşırı yükleme: Metodlar, sabitlik açısından aşırı yüklenebilir. Bu, aynı isim ve parametre imzasına sahip iki metodun olmasına izin verir, biri sabit diğeri değil. Derleyici, çağrının sabit veya sabit olmayan nesne üzerinde olup olmadığına göre uygun versiyonu seçer.
class MyClass {
    int value;
public:
    int getValue() const { // Sabit versiyon
        return value;
    }
    int getValue() {       // Sabit olmayan versiyon
        return value++;    // Durumu değiştirme imkanı
    }
};

void test(const MyClass& objConst, MyClass& objNonConst) {
    objConst.getValue();    // Sabit versiyon çağrılır
    objNonConst.getValue(); // Sabit olmayan versiyon çağrılır
}

Sabit olmayan metodlar:

Normal sınıf metodlarıdır ve nesnenin durumunu değiştirebilirler. Parametre listesinden sonra const anahtar kelimesi olmadan ilan edilirler.

Kullanım:

Nesne tipi Metod çağrısı Hangi metod çağrılır Açıklama
const T obj.method() Sadece sabit metod Sabit nesnenin durumu değiştirilemez.
T obj.method() Sabit olmayan metod Durumu değiştirebilirler.
T obj.method() const Sabit metod Eğer her iki versiyon da varsa ve sabit olmayan nesne üzerinde çağrılırsa, öncelik sabit olmayan versiyona aittir. Ancak, istenirse nesneye açıkça cast yapılarak sabit versiyon çağrılabilir (nadiren kullanılır).

Sabitlik kullanımı iyi bir uygulamadır çünkü kodun okunabilirliğini ve güvenliğini artırır, ayrıca derleyicinin ek optimizasyonlar yapmasına olanak tanır.