在类CExeption的成员函数Reason()中用cout显示异常的类型,在函数fn1()中用throw触发异常,在主函数的try模板中调用fn1(),在catch模板中捕获异常。算法:先根据要求定义一个类CExeption,然后用成员函数Reason()来显示错误信息,然后定义一个函数来完成除法功能,触发条件为除数为0,然后定义主函数来处理异常。
时间: 2024-03-26 15:34:27 浏览: 21
好的,我会按照您的要求回答您的问题。首先,根据您的要求,我们需要定义一个CExeption类,并且该类需要有一个成员函数Reason(),用于显示异常的类型。下面是代码示例:
```c++
#include<iostream>
using namespace std;
class CExeption{
public:
void Reason(){
cout<<"除数不能为0!"<<endl;
}
};
```
接下来,我们需要定义一个函数fn1(),该函数用于完成除法功能,并且在除数为0时抛出异常。下面是代码示例:
```c++
void fn1(int a, int b){
if(b == 0){
throw CExeption(); // 抛出异常
}
cout<<"a/b="<<a/b<<endl;
}
```
最后,我们需要在主函数的try模板中调用fn1(),并且在catch模板中捕获异常。下面是代码示例:
```c++
int main(){
int a = 10, b = 0;
try{
fn1(a, b);
}
catch(CExeption e){
e.Reason(); // 捕获异常并且显示异常信息
}
return 0;
}
```
综上所述,以上代码可以完成您提出的要求,实现了除数为0时抛出异常并且捕获异常并且显示异常信息的功能。
相关问题
3、在类CExeption的成员函数Reason()中用cout显示异常的类型,在函数fn1()中用throw触发异常,在主函数的try模板中调用fn1(),在catch模板中捕获异常。 算法:先根据要求定义一个类CExeption,然后用成员函数Reason()来显示错误信息,然后定义一个函数来完成除法功能,触发条件为除数为0,然后定义主函数来处理异常 给出运行结果和注释
好的,我明白了。以下是代码实现和注释:
```cpp
#include <iostream>
using namespace std;
class CExeption {
public:
void Reason() {
cout << "除数不能为0!" << endl;
}
};
double Divide(double num1, double num2) {
if (num2 == 0) {
CExeption e;
throw e; // 抛出异常对象
}
return num1 / num2;
}
int main() {
double num1, num2, result;
cout << "请输入两个数,计算它们的商:" << endl;
cin >> num1 >> num2;
try { // 在try模板中调用可能会抛出异常的函数
result = Divide(num1, num2);
cout << "计算结果为:" << result << endl;
}
catch (CExeption& e) { // 捕获抛出的异常对象
e.Reason(); // 显示错误信息
}
return 0;
}
```
运行结果:
```
请输入两个数,计算它们的商:
10 2
计算结果为:5
```
如果将第二个数输入0,则会触发抛出异常,并在catch模板中捕获并处理异常,输出错误信息:
```
请输入两个数,计算它们的商:
10 0
除数不能为0!
```
c++在 CException类的成员函数Reacon()中用cout显示异常的类型,在函数fn1()中用throw抛出异常,在主函数的try模块中调用fn1(),在catch模块中捕获异常
好的,以下是一个示例代码,实现了你所描述的功能:
```c++
#include <iostream>
#include <exception>
using namespace std;
class MyException : public exception {
public:
virtual const char* what() const throw() {
return "My Exception";
}
};
class MyDerivedException : public MyException {
public:
virtual const char* what() const throw() {
return "My Derived Exception";
}
};
class MyExceptionClass {
public:
void fn1() {
throw MyDerivedException();
}
};
int main() {
MyExceptionClass obj;
try {
obj.fn1();
}
catch (MyException& e) {
cout << "Exception caught: " << e.what() << endl;
}
return 0;
}
```
在这个例子中,我们定义了两个异常类 `MyException` 和 `MyDerivedException`。`MyDerivedException` 是从 `MyException` 派生而来的。在 `MyExceptionClass` 类中的 `fn1()` 函数中,我们抛出了一个 `MyDerivedException` 类型的异常。
在主函数中的 `try` 块中,我们调用了 `MyExceptionClass` 对象的 `fn1()` 函数,这个函数抛出了异常。在 `catch` 块中,我们捕获了异常,并使用 `e.what()` 函数来输出异常的类型。
注意:在 `catch` 块中,我们使用了 `MyException&` 类型的参数,这是因为 `MyDerivedException` 是从 `MyException` 派生而来的,所以我们可以使用 `MyException&` 来捕获这个异常。如果我们在 `catch` 块中使用了 `MyDerivedException&` 类型的参数,则会出现编译错误。