CodeBlanks Logo Icon CodeBlanks

Özet - Kapsülleme

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

main.cpp
#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

main.cpp
#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

main.cpp
#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

main.cpp
#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?

main.cpp
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

Soru
private: ____ int calls;
Cevap
private: mutable int calls;

Açıklama: mutable, const metot içinde değişime izin verir.

Orta seviye bölümündeki tüm dersler