ใน C ++ การจัดการข้อยกเว้นเป็นกระบวนการในการจัดการข้อผิดพลาดรันไทม์ ข้อยกเว้นคือเหตุการณ์ที่เกิดขึ้นขณะรันไทม์ใน C ++ ข้อยกเว้นทั้งหมดมาจากคลาส std::exception มันเป็นข้อผิดพลาดรันไทม์ที่สามารถจัดการได้ มันพิมพ์ข้อความแสดงข้อยกเว้นและยุติโปรแกรม หากเราไม่จัดการกับข้อยกเว้น
ข้อยกเว้นถูกกำหนดในมาตรฐาน C ++ เป็นคลาส <ข้อยกเว้น> ที่เราสามารถใช้ภายในโปรแกรมของเรา การจัดลำดับชั้นของคลาสหลัก-รองได้แสดงไว้ด้านล่าง -

คลาสข้อยกเว้นทั่วไปใน C ++ คือ -
| ซีเนียร์ | ข้อยกเว้น &คำอธิบาย |
|---|---|
| 1 | มาตรฐาน::ข้อยกเว้น นี่เป็นข้อยกเว้นและคลาสพาเรนต์ของข้อยกเว้น C++ มาตรฐานทั้งหมด |
| 2 | std::bad_cast เป็นข้อยกเว้นที่เกิดจาก dynamic_cast |
| 3 | std::bad_exception ข้อยกเว้นนี้ใช้เพื่อจัดการกับข้อยกเว้นที่ไม่คาดคิดในโปรแกรม C++ |
| 4 | std::bad_alloc โดยทั่วไปจะถูกโยนใหม่ |
| 5 | std::logic_failure ข้อยกเว้นนี้สามารถตรวจพบได้โดยการอ่านรหัส |
| 6 | std::runtime_error ไม่สามารถตรวจพบข้อยกเว้นนี้ได้โดยการอ่านโค้ด |
| 7 | std::bad_typeid เป็นข้อยกเว้นที่เกิดจาก typeid |
คำหลัก
มีคีย์เวิร์ดอยู่ 3 คำในการจัดการข้อยกเว้น:ลอง จับ และโยน
ลอง/จับบล็อก
ใน C ++ การจัดการข้อยกเว้นจะดำเนินการโดยใช้คำสั่ง try/catch รหัสที่อาจเกิดข้อยกเว้นถูกใช้เพื่อวางโดยบล็อก Try Catch block ใช้เพื่อจัดการกับข้อยกเว้น
โค้ดตัวอย่าง
#include <iostream>
using namespace std;
class Sample1 {
public:
Sample1() {
cout << "Construct an Object of sample1" << endl;
}
~Sample1() {
cout << "Destruct an Object of sample1" << endl;
}
};
class Sample2 {
public:
Sample2() {
int i=7;
cout << "Construct an Object of sample2" << endl;
throw i;
}
~Sample2() {
cout << "Destruct an Object of sample2" << endl;
}
};
int main() {
try {
Sample1 s1;
Sample2 s2;
} catch(int i) {
cout << "Caught " << i << endl;
}
} ผลลัพธ์
Construct an Object of sample1 Construct an Object of sample2 Destruct an Object of sample1 Caught 7
ผู้ใช้กำหนดข้อยกเว้น
เราสามารถกำหนดข้อยกเว้นของเราเองได้โดยการสืบทอดและแทนที่ฟังก์ชันคลาสข้อยกเว้น
โค้ดตัวอย่าง
#include <iostream>
#include <exception> using namespace std;
struct DivideByZero : public exception {
const char * what () const throw () {
return "My Exception";
}
};
int main() {
try {
throw DivideByZero();
} catch(DivideByZero& e) {
cout << "Exception caught" << endl; cout << e.what() << endl;
} catch(exception& e) {
}
} ผลลัพธ์
Exception caught My Exception what() = A public method provided by exception class and it has been overridden by all the child exception classes. It returns the cause of an exception.