①系统通过 throw 表达式抛出异常,throw 来避免将两个表示不同书的Sales_items 对象相加。
// first check that data is for the same item
if (!item1.same_isbn(item2))
throw runtime_error("Data must refer to same ISBN");
// ok, if we're still here the ISBNs are the same
std::cout << item1 + item2 << std::endl;
runtime_error 类型是标准库异常类中的一种,在 stdexcept 头文件中定义。
②try 块的通用语法形式是:
try { program-statements } catch (exception-specifier) { handler-statements } catch (exception-specifier) { handler-statements } //...
Sales_items 对象相加的那部分程序与负责与用户交流的那部分是分开的,则与用户交互的部分也许会包含下面的用于处理所捕获异常的代码:
while (cin >> item1 >> item2) {
try {
// execute code that will add the two Sales_items
// if the addition fails, the code throws a runtime_error exception
} catch (runtime_error err) {
// remind the user that ISBN must match and prompt for another pair
cout << err.what()
<< "\nTry Again? Enter y or n" << endl;
char c;
cin >> c;
if (cin && c == 'n')
break; // break out of the while loop
}
}