- # define _CRT_SECURE_NO_WARNINGS
- # include
- using namespace std;
- /* 自定义异常类 */
- class MyException
- {
- private:
- char* content;
- public:
- /* 异常类构造函数 */
- MyException(const char* content)
- {
- this->content =new char[strlen(content) +1];
- strcpy(this->content, content);
- cout <<"异常类有参构造函数执行"<< endl;
- }
- /* 异常类拷贝构造函数 */
- MyException(constMyException& me)
- {
- this->content =new char[strlen(me.content) +1];
- strcpy(this->content, me.content);
- cout <<"异常类拷贝构造函数执行"<< endl;
- }
- /* 异常类析构函数 */~MyException()
- {
- if(this->content != NULL)
- {
- delete[]this->content;
- this->content = NULL;
- }
- cout <<"异常类的析构函数执行"<< endl;
- }
- /* 异常类抛出异常信息 */
- void toString()
- {
- cout <<this->content << endl;
- }
- };
- /* 定义测试异常的函数 */
- doubledivide(doubled1,double d2)
- {
- if(d2 ==0)
- {
- throwMyException("除数不能为0");
- //throw new MyException("除数不能为0");
- }
- returnd1 / d2;
- }
- int main()
- {
- try
- {
- doubleresult = divide(1,0);
- cout <<"result = "<< result << endl;
- }
- catch (MyException e)
- {
- // catch的异常是元素类型,执行的是拷贝构造函数,存在两个异常对象,释放两个异常对象,不合理
- e.toString();
- }
- catch(MyException * e)
- {
- // catch的异常是指针类型,必须我们手动调用delete方法才能调用析构函数,不合理e->toString();
- delete e;
- }
- catch(MyException& e)
- {
- // catch的是引用类型,是原先抛出的对象,会自动执行析构函数,我们使用引用来接收抛出的异常对象
- e.toString();
- }
- catch (...)
- {
- cout <<"未知异常"<< endl;
- }
- return 0;
- }
来源: