CodeBlanks Logo Icon CodeBlanks

throw

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

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

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

Soru
if (x < 0) {
    ____ std::runtime_error("negatif");
}
Cevap
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ı

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