① 标准库中的异常是有限的;
② 在自己的异常类中,可以添加自己的信息。(标准库中的异常类值允许设置一个用来描述异常的字符串)。
如何编写自己的异常类?
① 建议自己的异常类要继承标准异常类。因为C++中可以抛出任何类型的异常,所以我们的异常类可以不继承自标准异常,但是这样可能会导致程序混乱,尤其是当我们多人协同开发时。
② 当继承标准异常类时,应该重载父类的what函数和虚析构函数。
③ 因为栈展开的过程中,要复制异常类型,那么要根据你在类中添加的成员考虑是否提供自己的复制构造函数。
//自定义异常类
class MyOutOfRange:public exception
{
public:
MyOutOfRange(const string errorInfo)
{
this->m_Error = errorInfo;
}
MyOutOfRange(const char * errorInfo)
{
this->m_Error = string( errorInfo);
}
virtual ~MyOutOfRange()
{
}
virtual const char * what() const
{
return this->m_Error.c_str() ;
}
string m_Error;
};
class Person
{
public:
Person(int age)
{
if (age <= 0 || age > 150)
{
//抛出异常 越界
//cout << "越界" << endl;
//throw out_of_range("年龄必须在0~150之间");
//throw length_error("长度异常");
throw MyOutOfRange(("我的异常 年龄必须在0~150之间"));
}
else
{
this->m_Age = age;
}
}
int m_Age;
};
void test01()
{
try
{
Person p(151);
}
catch ( out_of_range & e )
{
cout << e.what() << endl;
}
catch (length_error & e)
{
cout << e.what() << endl;
}
catch (MyOutOfRange e)
{
cout << e.what() << endl;
}
}