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
- try, catch, throw
- Keamanan Pengecualian
- Penentu noexcept
- Tipe Pengecualian Kustom