与 C++ 的第五类接触-语句
1. 语句
1.1. try 语句块与异常处理
在 C++ 中,异常处理包括:
throw
表达式,用于抛出异常try
语句块,包含一个或多个catch
子句- 一套
异常类
,用于在throw
表达式和相关catch
子句间传递异常的具体信息
1.1.1. throw 表达式
如下代码片断的功能为检查两个 Sales_item
对象是否具有相同的 ISBN
,是的话输出两个
对象的和,不是的话返回失败
Sales_item item1, item2; cin >> item1 >> item2; if (item1.isbn() == item2.isbn()) { cout << item1 + item2 << endl; return 0; } else { cerr << "Data must refer to same ISBN" << endl; return -1; }
但在实际的程序中,我们可以会想在其它位置处理错误,此时我们不再直接输出一条信息, 而是抛出一个异常
// 若 ISBN 不相同抛出异常 if (item1.isbn() != item2.isbn()) throw runtime_error("Data must refer to same ISBN"); cout << item1 + item2 << endl;
其中 runtime_error
是标准异常类型的一种,定义在 stdexcept
头文件中。
1.1.2. try
语句块
try { program-statements; } catch (exception-declaration) { handler-statements; } catch (exception-declaration) { handler-statements; } // ...
为代码加上错误处理
while (cin >> item1 >> item2) { try { // 此处添加两个 Sales_item 对象的代码 // 如果失败抛出一个 runtime_error 异常 } catch (runtime_error err) { // 提醒用户两个 ISBN 必须一致,询问是否重新输入 cout << err.what() << "\nTry Again?(y/n)" << endl; char c; cin >> c; if (!cin || c == 'n') break; } }
1.1.3. 异常类
<stdexcept>
中定义了一些异常类