Trong phần này, chúng ta sẽ xem cách sử dụng khối catch để xử lý ngoại lệ và chuyển đổi kiểu trong C ++.
Đầu tiên, hãy cho chúng tôi xem một đoạn mã và chúng tôi sẽ biết đâu sẽ là đầu ra và cách chúng tạo ra.
Ví dụ
#include <iostream> using namespace std; int main() { try{ throw 'a'; } catch(int a) { cout << "Integer value is caught :" << a; } catch(...) { cout << "Entering into default catch block"; } }
Đầu ra
Entering into default catch block
Vì vậy, lý do đằng sau điều này là gì. Tại sao loại đầu ra này lại được tạo ra? Như chúng ta có thể thấy ký tự ‘a’ được ném, nhưng khối bắt đầu tiên dành cho int. Nếu chúng tôi nghĩ rằng ASCII của ‘a’ là một số nguyên, thì việc nhập vào khối đầu tiên sẽ như vậy, nhưng loại chuyển đổi đó không áp dụng cho các khối bắt.
Hãy để chúng tôi xem một ví dụ khác. Trong ví dụ này, chúng ta sẽ thấy hàm tạo chuyển đổi không được gọi cho các đối tượng được ném.
Ví dụ
#include <iostream> using namespace std; class TestExcept1 {}; class TestExcept2 { public: TestExcept2 (const TestExcept1 &e ){ // Defining the Conversion constructor cout << "From the Conversion constructor"; } }; main() { try{ TestExcept1 exp1; throw exp1; } catch(TestExcept2 e2) { cout << "Caught TestExcept2 " << endl; } catch(...) { cout << "Entering into default catch block " << endl; } }
Đầu ra
Entering into default catch block
Các đối tượng kiểu dẫn xuất không được chuyển đổi thành các đối tượng kiểu cơ sở trong khi các đối tượng kiểu dẫn xuất được ném.