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ı:
- Güvenlik: Nesne durumunun kazara değiştirilmesini önler.
- Sabit nesnelerle kullanım: Sabit nesneler (
constile ilan edilenler) sadece sabit metodları çağırabilir. Sabit olmayan metodlar erişilebilir değildir. - 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.