Özet - Kapsülleme
- C++ kursu
- Orta seviye
- Ders 29/116
- 5 dk
private, getter/setter ve const'u birleştirerek bir Account sınıfı yazarsın.
Özet - Kapsülleme
Bu bölümde kapsüllemeyi derinleştirdik. private üyeler veriyi gizler; getter ve setter kontrollü erişim sağlar ve doğrulama yapar. const metotlar değişmezlik sözü verir; sabit nesneler yalnız bunları çağırabilir.
mutable üyeler const metot içinde de değiştirilebilir; bu önbelleklemede kullanışlıdır. friend fonksiyonlar private üyelere dışarıdan erişebilir; operatör aşırı yüklemede yararlıdır. Şimdi bunları bir araya getiren bir görev yapacağız.
Uygulama Sensor sınıfını kapsüllemeyle tanımla
Sensor sınıfını tanımla. private: altına int reading; ve mutable int reads; ekle. public: altına void setReading(int r) { if (r >= 0) reading = r; }, int getReading() const { reads++; return reading; } ve int getReads() const { return reads; } metotlarını ekle. main içinde bir örnek oluştur, setReading(30) çağır, getReading()'i iki kez çağır ve std::cout ile getReads()'i yazdır.
Başlangıç kodu
#include <iostream>
// Sensor sınıfını tanımla
int main() {
// Sensor örneği oluştur ve metotları çağır
return 0;
}Örnek çözüm
#include <iostream>
class Sensor {
int reading;
mutable int reads;
public:
void setReading(int r) {
if (r >= 0) reading = r;
}
int getReading() const {
reads++;
return reading;
}
int getReads() const {
return reads;
}
};
int main() {
Sensor s;
s.setReading(30);
s.getReading();
s.getReading();
std::cout << s.getReads();
return 0;
}Beklenen çıktı
2
Uygulama Sensor'a friend fonksiyon ekle
Yukarıdaki Sensor sınıfını al. public: altına friend void report(const Sensor&); arkadaş bildirimini ekle. Sınıf dışında void report(const Sensor& s) { std::cout << "Okuma: " << s.reading; } fonksiyonunu yaz. main içinde Sensor s; oluştur, setReading(25) çağır ve report(s) çağır.
Başlangıç kodu
#include <iostream>
class Sensor {
int reading;
mutable int reads;
public:
void setReading(int r) {
if (r >= 0) reading = r;
}
int getReading() const {
reads++;
return reading;
}
int getReads() const {
return reads;
}
// friend bildirimini ve report fonksiyonunu ekle
};
int main() {
// Sensor örneği oluştur ve report çağır
return 0;
}Örnek çözüm
#include <iostream>
class Sensor {
int reading;
mutable int reads;
public:
void setReading(int r) {
if (r >= 0) reading = r;
}
int getReading() const {
reads++;
return reading;
}
int getReads() const {
return reads;
}
friend void report(const Sensor&);
};
void report(const Sensor& s) {
std::cout << "Okuma: " << s.reading;
}
int main() {
Sensor s;
s.setReading(25);
report(s);
return 0;
}Beklenen çıktı
Okuma: 25
Bölüm sonu
Kapsülleme bölümünü tamamladın. Artık private ile veriyi gizleyebiliyor, getter ve setter ile kontrollü erişim sağlıyorsun. const metotlarla değişmezlik sözü veriyor, mutable ile önbellek gibi yan durumları yönetiyorsun.
friend ile gerekli durumlarda dış fonksiyonlara erişim tanıyabildin. Bu beş OOP konusu — sınıflar, yapıcı metotlar, miras, kütüphane tasarımı ve kapsülleme — C++'ın nesne yönelimli tarafının temelini oluşturuyor. Sonraki bölümlerde şablonlar (templates), akıllı işaretçiler ve STO gibi ileri konular seni bekliyor.
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir getter metodu neden const yapılır?
int getX() const { return x; }- Daha hızlı çalışsın diye
- Private yapabilmek için
- Nesneyi değiştirmeyeceğini belirtmek için Doğru cevap
- Sınıf dışından çağrılabilsin diye
Açıklama: const, metodun nesneyi değiştirmeyeceğini söyler.
2 mutable anahtar kelimesini yaz
private: ____ int calls;
private: mutable int calls;
Açıklama: mutable, const metot içinde değişime izin verir.