Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ข้อยกเว้นทำงานอย่างไรใน C++


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

ข้อยกเว้นถูกกำหนดในมาตรฐาน C ++ เป็นคลาส <ข้อยกเว้น> ที่เราสามารถใช้ภายในโปรแกรมของเรา การจัดลำดับชั้นของคลาสหลัก-รองได้แสดงไว้ด้านล่าง -

ข้อยกเว้นทำงานอย่างไรใน 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.