C++
Getter ve setter
Getter ve setter ile kontrollü erişim öğrenirsin.
Getter ve setter
Private üyelere kontrollü erişim sağlayan metotlara getter ve setter denir. Getter okur, setter yazar. İsim genelde get veya set önekiyle üye adından türetilir: getName(), setName().
Örnek: class Student { private: std::string name; public: std::string getName() { return name; } void setName(std::string n) { name = n; } };. Getter name'i döndürür; setter name'e değer atar. Setter içine doğrulama eklenebilir: if (!n.empty()) name = n; gibi. Böylece boş isim engellenir. Bu desen, kapsüllemenin standart yoluwdur.
Setter'da doğrulama
Setter'ın gücü, yazmadan önce kontrol yapabilmesinde yatar. Doğrudan atama yapsaydın kontrol edemezdin. Setter içinde parametreyi test eder, yalnız geçerliyse üye değişkene atarsın.
Örnek: void setAge(int a) { if (a >= 0 && a <= 150) age = a; }. Bu setter 0–150 aralığı dışındaki yaşları reddeder. setAge(-5) veya setAge(200) çağrıları age'i değiştirmez. Böylece nesne her zaman tutarlı durumda kalır. Setter'a ayrıca kenar durum loglaması veya hata fırlatma da eklenebilir.
Uygulama Student sınıfına getter ve setter ekle
Student sınıfını tanımla. private: altına int age; üye değişkeni ekle. public: altına int getAge() { return age; } ve void setAge(int a) { if (a >= 0) age = a; } metotlarını ekle. main içinde bir örnek oluştur, setAge(20) ve setAge(-5) çağır, sonra std::cout ile getAge()'yi yazdır.
Örnek çözümü göster
#include <iostream>
class Student {
int age;
public:
int getAge() {
return age;
}
void setAge(int a) {
if (a >= 0) age = a;
}
};
int main() {
Student s;
s.setAge(20);
s.setAge(-5);
std::cout << s.getAge();
return 0;
}
Kendini test et
-
Getter adını tamamla
std::string get____() { return name; }
Cevabı göster
std::string getName() { return name; }
-
setAge(-5) çağrısı ne yapar? (gövde: if (a >= 0 && a <= 150) age = a;)
void setAge(int a) { if (a >= 0 && a <= 150) age = a; }
- age = -5 yapar
- Derleme hatası verir
- age'i değiştirmez
- age = 0 yapar
Cevabı göster
age'i değiştirmez — -5, 0–150 aralığında olmadığı için age değişmez.
-
Metodu rolüne eşle
- getName()
- Okuma (getter)
- setName(n)
- Yazma (setter)
- if (a >= 0) age = a
- Doğrulama
- private: int age;
- Gizli veri
Sıradaki ders: const metotlar