Özel exception
- C++ kursu
- Başlangıç
- Ders 103/116
- 5 dk
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
#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
#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
class InvalidScore : ____ std::exception {
};
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 |