一.标准异常类
这个大哥写的很详细:http://c.biancheng.net/view/2333.html
下面实现一个out_of_range的标准异常类。
案例:实现一个类,异常人的年龄应该在0<age<120之间,否则抛出异常。
注意:
1. 引入对应头文件。
2. 修改类参数。
#include <iostream>
#include <stdexcept>//引入头文件
using namespace std;
class Person {
public:
Person() {
this->mAge = 0;
}
void setAge(int age) {
if (age < 0 || age>120) {
throw out_of_range("你是妖怪吧!");
}
else {
this->mAge = age;
}
}
private:
int mAge;//正常人的年龄!
};
void test01() {
Person p;
try{
p.setAge(150);
}
catch (out_of_range e)//或catch (exception e),因为out_of_range是exception子类
{
cout << e.what() << endl;
}
}
int main() {
test01();
}
结果:
二.编写自己的异常类
1.为什么要编写自己的异常类?
- 标准库中的异常类是有限的。
- 在自己的异常类中,可以添加自己的信息。(标准库中的异常类值可以设置一个用来描述异常的字符串)。
2.如何编写自己的异常类?
- 建议自己的异常类要继承标准异常类,因为C++中可以抛出任何类型的异常,所以我们的异常类可以不继承自标准异常,但是这样可能导致程序混乱,尤其是当我们多人协同开发时。
- 当继承标准异常类时,应该重写父类的what函数和虚析构函数。
- 因为栈展开的过程中,要复制异常类型,那么要根据你在类中添加的成员考虑是否提供自己的复制构造函数。