在C++異常處理中,覆蓋寫入(overwrite)是指在拋出異常時,將一個異常對象覆蓋另一個異常對象
以下是一個使用覆蓋寫入的示例:
#include<iostream>
#include <stdexcept>
class CustomException : public std::runtime_error {
public:
CustomException(const std::string& message) : std::runtime_error(message) {}
};
void function1() {
try {
throw std::runtime_error("Error in function1");
} catch (std::runtime_error& e) {
std::cout << "Caught exception in function1: " << e.what()<< std::endl;
throw CustomException("Custom error in function1"); // 覆蓋寫入
}
}
int main() {
try {
function1();
} catch (CustomException& e) {
std::cout << "Caught custom exception in main: " << e.what()<< std::endl;
} catch (std::runtime_error& e) {
std::cout << "Caught exception in main: " << e.what()<< std::endl;
}
return 0;
}
在這個示例中,function1()
函數首先拋出一個 std::runtime_error
異常。然后,在 catch
塊中,我們捕獲該異常并打印其消息。接下來,我們拋出一個 CustomException
異常,覆蓋之前拋出的異常。
在 main()
函數中,我們捕獲兩種類型的異常:CustomException
和 std::runtime_error
。由于我們在 function1()
中覆蓋了原始的 std::runtime_error
異常,因此在 main()
函數中只能捕獲到 CustomException
異常。如果我們沒有在 function1()
中覆蓋原始異常,那么在 main()
函數中也可以捕獲到 std::runtime_error
異常。