19.5 异常变量的声明周期
class MyException { public: MyException() { cout << "异常变量构造!" << endl; }; MyException( const MyException &e) { cout << "拷贝构造" << endl; } //析构函数 ~MyException() { cout << "异常变量析构" << endl; } };
19.5.1 以普通对象 接异常值
void test02() { try { throw MyException(); } catch(MyException e)//普通对象接异常(拷贝构造发生) { cout << "普通对象接异常" << endl; } }
/******运行结果**********/ 异常变量构造 拷贝构造 普通对象接异常 异常变量析构 异常变量析构
19.5.2 以对象指针 接异常值
void test03() { try { throw new MyException(); } catch(MyException *e)//指针对象接异常(delete释放) { cout << "普通对象接异常" << endl; delete e; //需要手动释放 } }
/******运行结果**********/ 异常变量构造 普通对象接异常 异常变量析构
19.5.3 对象引用 接异常值(推荐)
void test04() { try { throw MyException(); } catch(MyException &e)//引用对象接异常 { cout << "普通对象接异常" << endl; } }
/******运行结果**********/ 异常变量构造 普通对象接异常 异常变量析构
19.6 异常的多态
//异常基类 class BaseException { public: //派生关键词 virtual void printError(){}; }; //空指针异常 继承 class BaseException class NullPointerException : public BaseException { public: //重写虚函数 virtual void printError() { cout << "空指针异常!" << endl; } }; //越界异常 继承 class BaseException class OutofRangeException : public BaseException { public: //重写虚函数 virtual void printError() { cout << "越界异常!" << endl; } }; void doWork() { //throw NullPointerException(); throw OutofRangeException(); } int main() { try { doWork(); } catch(BaseException &ex) //父类引用 可以 捕获搭配父类派生出的所有子类的子类 { ex.printError(); } } 标签:cout,对象,MyException,c++,自行,案例,异常,void,变量 From: https://blog.csdn.net/HanSen102510/article/details/143312654