CodeBlanks Logo Icon CodeBlanks

Özel exception

Kendi std::exception türevi sınıfını yazmayı öğrenirsin.

Özel istisna sınıfı

Kendi istisna türünü tanımlamek için std::exception'dan türeyen bir sınıf yazarsın. Bu, uygulamanın özel hatalarını açıkça adlandırmanın temel yoludur. what() metodunu geçersiz kılarak özel mesajını döndürürsün.

class InvalidScore : public std::exception {
public:
    const char* what() const noexcept override {
        return "gecersiz skor";
    }
};

Burada InvalidScore, std::exception'dan türetilmiştir; what() metodu özel mesajı döndürür. Bu sayede catch (const std::exception& e) bloğu özel istisnayı da yakalar.

Özel istisnayı fırlatma

Tanımladığın özel istisnayı throw ile fırlatırsın. Standart istisnalar gibi, uygun catch bloğu tarafından yakalanır. catch (const std::exception& e) bloğu hem standart hem de özel istisnaları yakalar.

if (score > 100) {
    throw InvalidScore();
}

Burada score 100'den büyükse InvalidScore fırlatılır. Çağıran kod bunu standart bir catch bloğuyla yakalayıp e.what() ile özel mesajı okuyabilir.

Uygulama InvalidScore sınıfını tanımla

#include <stdexcept> ekle. class InvalidScore : public std::exception tanımla. İçinde public: bloğu aç ve const char* what() const noexcept override { return "gecersiz skor"; } metodunu yaz. main içinde try { throw InvalidScore(); } catch (const std::exception& e) { cout << e.what() << endl; } ekle.

Başlangıç kodu

main.cpp
#include <iostream>
#include <stdexcept>
using namespace std;

// InvalidScore sınıfını tanımla

int main() {
    // try içinde sınıfı fırlat, catch ile mesajı yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <stdexcept>
using namespace std;

class InvalidScore : public std::exception {
public:
    const char* what() const noexcept override {
        return "gecersiz skor";
    }
};

int main() {
    try {
        throw InvalidScore();
    } catch (const std::exception& e) {
        cout << e.what() << endl;
    }
    return 0;
}

Beklenen çıktı

gecersiz skor

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Özel istisnanın what() metodu nasıl bildirilir?

  • const char* what() const noexcept override
  • string what()
  • void what()
  • int what() Doğru cevap

Açıklama: what() override ile const char* döner.

2 Boşluğu doldur: sınıf türetme

Soru
class InvalidScore : ____ std::exception {
};
Cevap
class InvalidScore : public std::exception {
};

Açıklama: public türetme taban üyelere erişim sağlar.

3 İfadeyi amacıyla eşleştir

Kavram Anlamı
class InvalidScore özel tür tanımı
public std::exception temel sınıf
override metodu geçersiz kılar

Başlangıç bölümündeki tüm dersler