我想通过定义自己的构造函数和向用户输出自定义错误消息的print()方法来编写一个继承自基类异常类out_of_range的StrExcept异常类。
现在这是我的代码:
class StrExcept: public out_of_range
{
string message;
public:
StrExcept():out_of_range("The value entered is out of range"),message("The value entered is out of range"){};
void print(){
cout << message;
}
};
内部主要方法:
try
{
string str="My name";
// the exception will be fired
str.substr(11,2);
}
// i want to catch it using this custom class
catch (StrExcept &outOfRange )
{
// i want to print the error message using print method
outOfRange.print();
}
但为什么不工作?和程序崩溃???
答案 0 :(得分:2)
仅仅因为你从一个类派生并不意味着已经存在的代码(例如basic_string::substr
的实现)将使用它。该函数将抛出std::out_of_range
。 catch(const StrExcept&)
只会捕获类型StrExcept
的异常或从它派生的类,这不是抛出的类。