throw
- C++ kursu
- Başlangıç
- Ders 101/116
- 4 dk
throw ile kendi istisnalarını fırlatmayı öğrenirsin.
throw ile istisna fırlatma
Kendi istisnanı fırlatmak için throw anahtar sözcüğünü kullanırsın. Ardından bir değer ya da istisna nesnesi yazarsın; bu değer uygun catch bloğuna kadar yukarı doğru yayılır.
if (yas < 0) {
throw std::runtime_error("negatif yas");
}Burada yas negatifse bir std::runtime_error fırlatılır. Çağıran kod bunu try/catch ile yakalayabilir. throw ile programın anormal bir durumu açıkça bildirmesini sağlarsın.
throw ve tür seçimi
throw ile herhangi bir değeri fırlatabilirsin; ancak std::exception türevi türleri kullanmak en iyi uygulamadır. Bu sayede catch (const std::exception& e) bloğu türden bağımsız olarak istisnayı yakalar.
throw std::runtime_error("disk dolu");
throw std::invalid_argument("gecersiz kod");
throw std::out_of_range("sinir asimi");Bu üç tür de std::exception'dan türetilmiştir. Her birinin kurucusu bir açıklama dizesi alır; bu dizeye .what() metoduyla erişilir. Doğru türü seçmek hatanın kaynağını anlamayı kolaylaştırır.
Uygulama Negatif yaşı fırlat
#include <stdexcept> başlığını ekle. int age = -5; tanımla. try bloğu içinde if (age < 0) throw std::runtime_error("negatif yas"); yaz. catch (const std::exception& e) bloğu içinde cout << e.what() << endl; çağrısı yap.
Başlangıç kodu
#include <iostream>
#include <stdexcept>
using namespace std;
int main() {
int age = -5;
// age<0 ise fırlat, yakalayıp mesajı yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <stdexcept>
using namespace std;
int main() {
int age = -5;
try {
if (age < 0) throw std::runtime_error("negatif yas");
} catch (const std::exception& e) {
cout << e.what() << endl;
}
return 0;
}Beklenen çıktı
negatif yas
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Boşluğu doldur: throw çağrısı
if (x < 0) {
____ std::runtime_error("negatif");
}
if (x < 0) {
throw std::runtime_error("negatif");
}
Açıklama: throw ile istisna fırlatılır.
2 throw std::runtime_error("x") hangi başlığı gerektirir?
- <iostream>
- <stdexcept> Doğru cevap
- <string>
- <vector>
Açıklama: runtime_error stdexcept başlığında tanımlıdır.
3 İstisna türünü senaryosuyla eşleştir
| Kavram | Anlamı |
|---|---|
runtime_error |
çalışma zamanı |
invalid_argument |
geçersiz giriş |
out_of_range |
sınır aşımı |