Computer >> Máy Tính >  >> Lập trình >> C ++

Bắt các ngoại lệ lớp cơ sở và lớp dẫn xuất trong C ++

Để bắt một ngoại lệ cho cả lớp cơ sở và lớp dẫn xuất thì chúng ta cần đặt khối catch của lớp dẫn xuất trước lớp cơ sở. Nếu không, khối bắt của lớp dẫn xuất sẽ không bao giờ đạt được.

Thuật toán

Begin
   Declare a class B.
   Declare another class D which inherits class B.
   Declare an object of class D.
   Try: throw derived.
   Catch (D derived)
      Print “Caught Derived Exception”.
   Catch (B b)
      Print “Caught Base Exception”.
End.

Đây là một ví dụ đơn giản trong đó bắt của lớp dẫn xuất đã được đặt trước bắt của lớp cơ sở, bây giờ hãy kiểm tra Đầu ra

#include<iostream>
using namespace std;
class B {};
class D: public B {}; //class D inherit the class B
int main() {
   D derived;
   try {
      throw derived;
   }
   catch(D derived){
      cout<<"Caught Derived Exception"; //catch block of derived class
   }
   catch(B b) {
      cout<<"Caught Base Exception"; //catch block of base class
   }
   return 0;
}

Đầu ra

Caught Derived Exception

Đây là một ví dụ đơn giản, nơi bắt của lớp cơ sở đã được đặt trước khi bắt của lớp dẫn xuất, bây giờ hãy kiểm tra Đầu ra

#include<iostream>
using namespace std;

class B {};
class D: public B {}; //class D inherit the class B
int main() {
   D derived;
   try {
      throw derived;
   }
   catch(B b) {
      cout<<"Caught Base Exception"; //catch block of base class
   }
   catch(D derived){
      cout<<"Caught Derived Exception"; //catch block of derived class
   }
   return 0;
}

Đầu ra

Caught Base Exception
Thus it is proved that we need to put catch block of derived class before the base class. Otherwise, the catch block of derived class will never be reached.