#include <iostream> #include <string> using namespace std; class CException { public: string msg; CException(string s) : msg(s) {} }; double Devide(double x, double y) { if (y == 0) throw CException("devided by zero"); cout << "in Devide" << endl; return x / y; } int CountTax(int salary) { try { if (salary < 0) throw - 1; cout << "counting tax" << endl; } catch (int) { cout << "salary < 0" << endl; } cout << "tax counted" << endl; return salary * 0.15; } int main() { double f = 1.2; try { CountTax(-1); f = Devide(3, 0); cout << "end of try block" << endl; } catch (CException e) { cout << e.msg << endl; } cout << "f = " << f << endl; cout << "finished" << endl; return 0; }
时间: 2024-04-16 12:29:23 浏览: 49
这是一个简单的 C++ 程序,主要涉及异常处理的示例。以下是程序的执行流程:
1. 定义了一个名为 `CException` 的异常类,其中包含了一个成员变量 `msg`,用于存储异常信息。
2. 定义了一个名为 `Devide` 的函数,用于计算两个数的除法。如果除数为零,则抛出一个 `CException` 类型的异常,并输出异常信息。
3. 定义了一个名为 `CountTax` 的函数,用于计算税收。如果输入的工资为负数,则抛出一个整数类型的异常,并输出异常信息。
4. 在 `main` 函数中定义了一个变量 `f`,初始值为 `1.2`。
5. 在 `try` 块中,首先调用 `CountTax(-1)`,由于工资为负数,会触发异常处理,输出 "salary < 0"。
6. 接着调用 `Devide(3, 0)`,由于除数为零,会触发异常处理,输出 "devided by zero"。
7. 在异常处理块中,捕获到 `CException` 类型的异常对象 `e`,并输出该异常对象的 `msg` 成员变量的值。
8. 最后输出变量 `f` 的值,并输出 "finished"。
因此,程序的输出结果应该是:
```
salary < 0
devided by zero
f = 1.2
finished
```
相关问题
#include <iostream> using namespace std; class CException { /********** Begin **********/ /********** End **********/ }; void fn1() { throw CException(); } int main() { try { fn1(); } catch (CException& ce) { ce.Reason(); } return 0; }
这段代码需要你实现 CException 类中的 Reason 函数,让它能够输出异常的原因。以下是一个可能的实现方式:
```cpp
#include <iostream>
#include <string>
using namespace std;
class CException {
public:
CException() : m_reason("Unknown Exception") {}
CException(const string& reason) : m_reason(reason) {}
void Reason() const { cout << m_reason << endl; }
private:
string m_reason;
};
void fn1() {
throw CException("Exception Occurred");
}
int main() {
try {
fn1();
} catch (CException& ce) {
ce.Reason();
}
return 0;
}
```
在这个示例中,我们在 CException 类中添加了一个带有字符串参数的构造函数,用于初始化异常的原因。我们还添加了一个名为 Reason 的成员函数,它输出异常的原因。
在 fn1 函数中,我们抛出了一个 CException 类型的异常,并在 main 函数中使用 try-catch 语句来捕获这个异常。在 catch 块中,我们调用了 ce.Reason() 函数来输出异常的原因。
希望这个示例对你有所帮助!
阅读全文