gpt4 book ai didi

c++ - 自定义异常类——我们为什么需要它?

转载 作者:行者123 更新时间:2023-11-30 04:03:43 24 4
gpt4 key购买 nike

我正在阅读有关自定义异常的内容。这就是我所做的。

#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;
}

我明白了,我可以抛出我的自定义类对象并可以捕获它。我不明白这样做的目的。有人能解释一下为什么我们需要自定义异常类吗?任何实际示例都将帮助我理解使用自定义异常类的目的。

谢谢。

最佳答案

假设还有另一个用户定义的 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 子句中,您通过以相同方式处理 myDerivedmyDerived2 类型的异常来限制您自己。

  • 如果您想以不同的方式处理 myDerivedmyDerived2 类型的抛出怎么办?

  • 那么您将不得不定义一个不同的 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 */
}
  • 从上面的示例中,我认为很明显,定义自定义异常为程序员提供了一个有值(value)的多功能工具,可以以更通用和更专业的方式处理抛出。

关于c++ - 自定义异常类——我们为什么需要它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24259736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com