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