Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

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

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

Thuật toán

Bắt đầu
  Khai báo class B.
  Khai báo class D kế thừa class B.
  Khai báo đối tượng của class D.
  Try: throw derived.
  Catch (D derived)
    In "Đã bắt ngoại lệ Derived".
  Catch (B b)
    In "Đã bắt ngoại lệ Base".
Kết thúc.

Dưới đây là ví dụ đơn giản khi catch của derived class đặt trước catch của base class, xem kết quả:

#include <iostream>
using namespace std;
class B {};
class D: public B {}; // class D kế thừa class B
int main() {
    D derived;
    try {
        throw derived;
    }
    catch(D derived){
        cout << "Đã bắt ngoại lệ Derived"; // catch block của derived class
    }
    catch(B b) {
        cout << "Đã bắt ngoại lệ Base"; // catch block của base class
    }
    return 0;
}

Kết quả

Đã bắt ngoại lệ Derived

Dưới đây là ví dụ khi catch của base class đặt trước catch của derived class, xem kết quả:

#include <iostream>
using namespace std;
class B {};
class D: public B {}; // class D kế thừa class B
int main() {
    D derived;
    try {
        throw derived;
    }
    catch(B b) {
        cout << "Đã bắt ngoại lệ Base"; // catch block của base class
    }
    catch(D derived){
        cout << "Đã bắt ngoại lệ Derived"; // catch block của derived class
    }
    return 0;
}

Kết quả

Đã bắt ngoại lệ Base
Vậy là chứng minh rằng cần đặt catch block của derived class trước base class. Nếu không, catch block của derived class sẽ không bao giờ được thực thi.