qfedu-cpp-level/day8/d3.cpp

76 lines
1.4 KiB
C++

// throw 的限制
// 在使用 throw 抛出异常信息时,受到函数声明处的 throw() 声明的
// 可抛出异常类型的限制。
// 如: 函数内可以抛出任何异常
#include <iostream>
using namespace std;
class A
{
public:
int n;
public:
A(int n = 0) : n(n) {}
};
// throw() 声明表示不抛出任何异常
// throw(int, char, double, A) 表示可以抛出 int, char, double, A 类型的异常
void show(int x) throw(int, char, double, A)
{
switch (x)
{
case 1:
throw 0;
break;
case 2:
throw 'a';
break;
case 3:
throw "abc";
break;
case 4:
throw 1.25;
break;
case 5:
throw A(100); // 抛出自定义类的对象
break;
// default 可以不写,因为前面已经覆盖了所有情况
}
cout << "x = " << x << endl;
}
int main()
{
cout << "输入一个整数: ";
int x;
cin >> x;
try
{
show(x);
}
catch (const int &error)
{
cout << "捕获异常: " << error << endl;
}
catch (const char &error)
{
cout << "捕获异常: " << error << endl;
}
catch (const char *error)
{
cout << "捕获异常: " << error << endl;
}
catch (const double &error)
{
cout << "捕获异常: " << error << endl;
}
catch (const A &error)
{
cout << "捕获异常: " << error.n << endl;
}
return 0;
}