0Pricing
C++ Academy · Pelajaran

Tipe Pengecualian Kustom

Definisikan pengecualian Anda sendiri

Tipe Pengecualian Kustom adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.

Mengapa Pengecualian Khusus?

Mendefinisikan jenis pengecualian Anda sendiri memungkinkan pemanggil menangkap kesalahan Anda secara spesifik dan membawa data khusus domain bersama kesalahan tersebut.

Turunkan dari std::exception

Dasarkan pengecualian Anda pada std::exception atau subjenisnya agar terintegrasi dengan penangan standar dan menyediakan what().

#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(); }
};

Melempar dan Menangkapnya

Jenis Anda berperilaku seperti pengecualian lainnya: lempar berdasarkan nilai, lalu tangkap berdasarkan referensi.

#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";
    }
}

Gunakan Kembali Kelas Dasar Standar

Sering kali Anda dapat menurunkan jenis dari std::runtime_error atau std::logic_error, yang sudah menyimpan pesan—lebih sedikit kode tambahan.

#include <stdexcept>
#include <string>

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

Membawa Data Tambahan

Pengecualian khusus dapat menyimpan anggota seperti kode kesalahan atau nilai yang bermasalah, sehingga memberi penangan lebih banyak konteks.

#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) {}
};

Menangkap Berdasarkan Kelas Dasar

Karena jenis Anda diturunkan dari std::exception, penangan umum tetap dapat menangkapnya melalui referensi ke kelas dasar.

#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";
    }
}

Membangun Hierarki Pengecualian

Kelompokkan kesalahan yang berkaitan di bawah satu kelas dasar agar pemanggil dapat menangkap seluruh kelompok atau satu jenis tertentu.

#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; };

Pertahankan what() noexcept

Timpa what() sebagai const noexcept dan kembalikan penyangga yang stabil—fungsi tersebut tidak boleh pernah melempar pengecualian atau mengembalikan penunjuk yang menggantung.

Lempar Berdasarkan Nilai

Lempar objek pengecualian berdasarkan nilai, misalnya throw HttpError(500, "x");. Waktu proses mengelola penyimpanannya selama penguraian.

Dokumentasikan Pengecualian yang Dilempar

Jadikan jenis pengecualian API Anda sebagai bagian dari kontraknya agar pemanggil mengetahui penangkapan mana yang harus ditulis.

Jaga agar Tetap Sederhana

Sebagian besar proyek hanya memerlukan sejumlah kecil jenis pengecualian. Menurunkan jenis dari std::runtime_error mencakup sebagian besar kasus dengan rapi.

Pemeriksaan Cepat

Uji pemahaman Anda tentang pengecualian khusus.

Ringkasan

Anda telah mempelajari cara mendefinisikan jenis pengecualian khusus dengan menurunkannya dari std::exception atau std::runtime_error, membawa data tambahan, membangun hierarki, mempertahankan what() sebagai noexcept, dan melempar berdasarkan nilai. Pertahankan jumlah jenisnya tetap sedikit dan dokumentasikan dengan baik.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tipe Pengecualian Kustom” gratis?

Ya — teks lengkap “Tipe Pengecualian Kustom” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Tipe Pengecualian Kustom”?

Definisikan pengecualian Anda sendiri Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C++ Academy?

Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Tipe Pengecualian Kustom” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. try, catch, throw
  2. Keamanan Pengecualian
  3. Penentu noexcept
  4. Tipe Pengecualian Kustom
← Kembali ke C++ Academy