0Pricing
C++ Academy · Ders

Özel Özel Durum Türleri

Kendi özel durumlarınızı tanımlayın

Özel Özel Durum Türleri, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.

Neden Özel İstisnalar?

Kendi istisna türlerinizi tanımlamak, çağıranların sizin hatalarınızı özel olarak yakalamasını ve hatayla birlikte alana özgü veriler taşımasını sağlar.

std::exception'dan Türetme

İstisnalarınızı std::exception'dan (veya bir alt sınıftan) türetin; böylece standart işleyicilerle bütünleşir ve what() işlevini sunarsınız.

#include <exception>
#include <string>

class ConfigError : public std::exception {
    std::string msg;
public:
    explicit ConfigError(std::string m) : msg(std::move(m)) {}
    const char* what() const noexcept override { return msg.c_str(); }
};

Oluşturma ve Yakalama

Türünüz diğer tüm istisnalar gibi davranır: onu oluşturun ve başvuruyla yakalayın.

#include <iostream>
#include <exception>
#include <string>

class ConfigError : public std::exception {
    std::string msg;
public:
    explicit ConfigError(std::string m) : msg(std::move(m)) {}
    const char* what() const noexcept override { return msg.c_str(); }
};

int main() {
    try {
        throw ConfigError("missing key");
    } catch (const ConfigError& e) {
        std::cout << e.what() << "\n";
    }
}

Standart Temel Sınıfları Yeniden Kullanın

Çoğu zaman, bir iletiyi zaten saklayan std::runtime_error veya std::logic_error'dan türetebilirsiniz; böylece daha az şablon kod yazarsınız.

#include <stdexcept>
#include <string>

class NetworkError : public std::runtime_error {
public:
    explicit NetworkError(const std::string& m) : std::runtime_error(m) {}
};

Ek Veri Taşıma

Özel istisnalar hata kodu veya soruna neden olan değer gibi alanlar içerebilir; bu da işleyicilere daha fazla bağlam sağlar.

#include <stdexcept>
#include <string>

class HttpError : public std::runtime_error {
public:
    int status;
    HttpError(int s, const std::string& m)
        : std::runtime_error(m), status(s) {}
};

Temel Sınıfla Yakalama

Türünüz std::exception'dan türediği için genel bir işleyici de onu temel sınıfa yapılan başvuru üzerinden yakalayabilir.

#include <iostream>
#include <stdexcept>

class HttpError : public std::runtime_error {
public:
    int status;
    HttpError(int s, const std::string& m) : std::runtime_error(m), status(s) {}
};

int main() {
    try {
        throw HttpError(404, "not found");
    } catch (const std::exception& e) {
        std::cout << e.what() << "\n";
    }
}

Bir İstisna Hiyerarşisi Oluşturma

İlişkili hataları ortak bir temel sınıf altında gruplayın; böylece çağıranlar bir tür ailesinin tamamını veya tek bir özel türü yakalayabilir.

#include <stdexcept>

struct AppError : std::runtime_error { using std::runtime_error::runtime_error; };
struct DbError  : AppError       { using AppError::AppError; };
struct AuthError: AppError       { using AppError::AppError; };

what() noexcept Olarak Kalmalıdır

what() işlevini const noexcept olarak geçersiz kılın ve kararlı bir arabellek döndürün; bu işlev hiçbir zaman istisna oluşturmamalı veya geçersiz bir işaretçi döndürmemelidir.

Değerle İstisna Oluşturma

İstisna nesnelerini değerle oluşturun (ör. throw HttpError(500, "x");). Çalışma zamanı, yığın çözme sırasında bunların depolama alanını yönetir.

Oluşturduğunuz İstisnaları Belgeleyin

API'nizin istisna türlerini sözleşmesinin bir parçası hâline getirin; böylece çağıranlar hangi yakalamaları yazacaklarını bilir.

Basit Tutun

Çoğu projenin yalnızca az sayıda istisna türüne ihtiyacı vardır. std::runtime_error'dan türetmek, durumların çoğunu temiz bir biçimde kapsar.

Hızlı Kontrol

Özel istisnalar konusundaki anlayışınızı sınayın.

Özet

std::exception veya std::runtime_error'dan türeterek özel istisna türleri tanımlamayı, ek veri taşımayı, hiyerarşiler oluşturmayı, what() işlevini noexcept olarak tutmayı ve değerle istisna oluşturmayı öğrendiniz. Tür kümesini küçük ve belgeli tutun.

Sıkça Sorulan Sorular

“Özel Özel Durum Türleri” dersi ücretsiz mi?

Evet — “Özel Özel Durum Türleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.

“Özel Özel Durum Türleri” dersinde ne öğreneceğim?

Kendi özel durumlarınızı tanımlayın C++ Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C++ Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C++ Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Özel Özel Durum Türleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C++ Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C++ Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. try, catch, throw
  2. Özel Durum Güvenliği
  3. noexcept Belirteci
  4. Özel Özel Durum Türleri
← C++ Academy Sayfasına Dön