C++‘da const
Operatörünü Anlamak
C++ ile çalışırken, sınıflarda const
anahtar kelimesi ile birlikte bildirilmiş metodlarla karşılaşabilirsiniz. Bu durum kafa karıştırıcı olabilir, özellikle bunun gerçekten ne anlama geldiğinden emin değilseniz. Bu yazıda, const
operatörünün C++ yöntemlerindeki rolünü açıklayacak, önemini ve işlevselliğini örnekler ile göstereceğiz.
Yöntem Bildirimlerinde const
Ne Anlama Gelir?
Bir C++ sınıfında, bir yöntemi const
anahtar kelimesi ile bildirdiğinizde, bu şu anlama gelir:
class A {
public:
void Foo() const;
};
Bu, metodun nesnenin durumunu değiştirmesine izin verilmediğini belirtir. Bu, fonksiyonun derleyiciye, sınıfın herhangi bir üye değişkenini değiştirmeyeceği hakkında söz verdiği anlamına gelir ve bu da nesneleri işlerken daha fazla güvenlik ve netlik sağlar.
const
Fonksiyonlarının Kuralları
- Sözleşme Yükümlülüğü: Bir fonksiyonu
const
ile bildirerek, bu fonksiyonun üye değişkenlerinin değerini değiştirmeyeceğini veya içinden non-const üye fonksiyonlarını çağırmayacağını belirtmiş olursunuz. - Const Nesnelerle Uyumluluk:
const
anahtar kelimesi ile tanımlanmış bir nesne üzerindeconst
bir fonksiyon çağırabilirsiniz. Örneğin, eğer şöyle bir şeyiniz varsa:
const A *A1 = new A();
A1->Foo(); // Tamam
Bu kod sorunsuz çalışır, çünkü Foo()
nesne A1
‘in durumunu değiştirmez.
Non-Const Fonksiyonların Gerekliliği
Aşağıdaki örneği düşünün:
class A {
public:
void Foo() const; // Const fonksiyonu
void Moo(); // Non-const fonksiyonu
private:
int m_nState; // Durumu temsil eden bir int
int GetState() const { return m_nState; }
void SetState(int val) { m_nState = val; }
};
const A *A1 = new A();
A *A2 = new A();
A1->Foo(); // Tamam
A1->Moo(); // Hata - Const nesne örneği üzerinde non-const fonksiyonu çağırılmaz
Örnekte Kullanım
A1
üzerindeFoo()
çağrısı yapmanız mümkündür çünkü bu birconst
metoddur.Moo()
gibi non-const bir metodu çağırmaya çalışmak, nesnenin durumunu değiştirdiği için bir hataya yol açar.
mutable
Anahtar Kelimesinin Rolü
Bazen, çevresindeki nesne mantıksal olarak const
olarak kabul edildiğinde belirli bir üye değişkeninin değiştirilebilir olmasını isteyebilirsiniz. Böyle durumlarda, değişkeni mutable
anahtar kelimesi ile bildirebilirsiniz. Örneğin:
class A {
private:
mutable int m_nState; // Bu, const fonksiyonlarda değiştirilebilir
};
Bu, m_nState
üyesinin const
olduğunu beyan ettiğiniz bir metod içinde değiştirilebilmesini sağlar. Bunun esasen derleyiciye bu değişken üzerindeki değişiklikleri göz ardı etmesini söyleyerek, iç durum değişikliklerini yönetirken tutarlı bir arayüz oluşturmanıza imkan tanır.
Ana Noktaların Özeti
const
metodları, üye değişkenlerini değiştirmeyeceğine dair söz verir.const
nesneler üzerindeconst
metodları çağırabilirsiniz.const
nesneler üzerinde non-const
metodları çağırmanız mümkün değildir.- Const fonksiyonlarda değiştirilebilecek üyeler için
mutable
kullanın.
Sonuç
C++‘da const
operatörünü anlamak, özellikle değiştirilemeyecek nesneleri yönetirken güvenli ve etkili kod yazmak için hayati önem taşır. Bu kurallara uyarak, C++ uygulamalarınızda daha sürdürülebilir ve tahmin edilebilir kod oluşturabilirsiniz. const
anahtar kelimesi, yalnızca kazara yapılan değişiklikleri önlemekle kalmaz, aynı zamanda kodunuzu daha sonra okuyacak kişiler için niyetlerinizi açık bir şekilde belgelemeye yardımcı olur.