我正在阅读有关自定义异常的内容..这就是我所做的。
#include <iostream>
#include <exception>
#include <stdexcept>
using namespace std;
class myBase : public exception
{
public:
myBase() {};
virtual ~myBase(void) {};
virtual const char* what() const { return "Hello, you have done a mistake"; }
};
class myDerived : public myBase
{
public:
myDerived() {};
virtual ~myDerived(void) {};
const char* what() const { return "Hello, you have done a mistake in - derived class"; }
};
int main(void)
{
try
{
throw myDerived();
}
catch (exception& e)
{
cout << e.what() << endl;
}
getchar();
return 0;
}
我明白了,我可以抛出自定义类对象并捕获它。我不明白这个的目的。有人可以解释我为什么需要自定义异常类?任何实际示例都将帮助我理解使用自定义异常类的目的。
感谢。
答案 0 :(得分:1)
在c ++中你可以抛出你想要的任何类型,你不需要继承std::exception
。
在不同的catch语句中捕获不同类型的能力很有用,因为您可以针对不同的条件抛出不同的异常类型。通过这种方式,您可以正确处理不同的例外情况。
在这个玩具示例中,基于变量one
,在catch语句中抛出并处理了不同的异常。
在这种情况下,&#34; string&#34;打印到stdout
。
#include <iostream>
using namespace std;
int main(void)
{
int one = 0;
try
{
if(one)
throw 1;
else
throw "string";
}
catch (int& i)
{
cout << i << endl;
}
catch (const char* s)
{
cout << s << endl;
}
return 0;
}
答案 1 :(得分:1)
让我们说,还有另一个用户定义的class
也继承自class myBase
:
class myDerived2 : public myBase {
public:
myDerived2() {}
virtual ~myDerived2() {}
};
并且假设您有一个try
catch
子句:
try {
myDerived A;
myDerived2 B;
...
/* to staff with both A and B */
...
} catch (std::exception& e){
cout << e.what() << endl;
}
在上面的try - catch
子句中,您通过以相同方式处理myDerived
和myDerived2
类型的例外来限制自己。
如果您想以不同的方式处理myDerived
和myDerived2
类型的投掷怎么办?
然后你必须定义一个不同的try-catch
子句:
try {
myDerived A;
myDerived2 B;
...
/* to staff with both A and B */
...
} catch (myDerived &d1) {
/* treat exception of type myDerived */
} catch (myDerived &d2) {
/* treat exception of type myDerived2 */
}