CException(string s) : msg(s) {}
时间: 2024-04-16 07:29:55 浏览: 104
这是一个构造函数的实现,用于初始化 `CException` 类的对象。在这个构造函数中,使用了成员初始化列表来初始化 `msg` 成员变量。
`CException` 类的构造函数接受一个 `string` 类型的参数 `s`。在构造函数体中,通过 `msg(s)` 将参数 `s` 的值赋给成员变量 `msg`,实现了对成员变量的初始化操作。
这种成员初始化列表的写法可以在对象构造时直接初始化成员变量,而不需要在构造函数体中使用赋值语句来完成初始化。这样做的好处是可以提高代码的效率,并且可以确保成员变量在对象构造完成之前已经被正确初始化。
相关问题
c++报错undefined reference to `CV3D::CException::CException(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
这个错误通常发生在链接阶段,提示找不到`CV3D::CException::CException`的定义。这可能是由于以下原因之一导致的:
1. 缺少相关的库文件或链接的库文件位置不正确。请确保您的代码中引用的库文件已正确安装,并且在编译时指定了正确的库文件路径。
2. 定义和声明不匹配。请检查`CException`类的定义和声明是否一致。确保在类的定义中包含了正确的构造函数实现。
3. 编译顺序问题。如果您的项目包含多个源文件,可能需要按照正确的顺序进行编译和链接。请确保先编译包含`CException`类定义的源文件,再编译引用它的其他源文件。
如果您能提供更多的代码或详细的编译错误信息,我可以给出更具体的建议。
#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; }
这是一个简单的 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
```
阅读全文