网站开发简易软件,深圳市龙华区观澜街道,凡科小程序好用吗,wordpress关闭多站点异常接口声明
为了加强程序的可读性#xff0c;可以在函数声明中列出可能抛出异常的所有类型#xff0c;例如#xff1a;void func() throw(A,B,C);这个函数func能够且只能抛出类型A,B,C及其子类的异常如果在函数声明中没有包含异常接口声明#xff0c;则此函数可以抛任何…异常接口声明
为了加强程序的可读性可以在函数声明中列出可能抛出异常的所有类型例如void func() throw(A,B,C);这个函数func能够且只能抛出类型A,B,C及其子类的异常如果在函数声明中没有包含异常接口声明则此函数可以抛任何类型的异常例如void func()一个不抛任何类型异常的函数声明为:void func() throw()如果一个函数抛出了它的异常接口声明所不允许抛出的异常unexcepted函数会被调用该函数默认行为调用terminate函数中断程序如果想抛出特定的类型异常可以利用异常的接口声明。void func() throw()//throw(int)只能抛出int类型的异常 throw()不抛出任何类型的异常
异常变量的生命周期 throw的异常是有类型的可以是数字字符串类对象 throw的异常是有类型的catch需严格匹配异常类型 如果MyException e,会多开销一份数据调用拷贝构造 如果MyException *e不会提前释放对象new自己管理delete 推荐MyException e容易些而且就一分数据 #includeiostreamusing namespace std;class myException{public:myException(){cout myException的默认构造 endl;}myException(const myExceptione){cout myException的拷贝构造 endl;}~myException(){cout myException的析构调用 endl;}void prtintError(){m_A 100;cout error this-m_A endl;}int m_A;};void doWork(){throw myException();}void test01(){try{doWork();}catch (myException *e)//myException e会多开销一份数据{//e-prtintError();//e-prtintError();//e-prtintError();//指向非法内存空间不应该这么做cout 捕获异常 endl;//delete e; //靠自觉释放对象}}int main(){test01();system(pause);return 0;}异常的多态使用 利用多态来实现printError同一个接口的调用 抛出不同的错误对象 #includeiostreamusing namespace std;//异常基类class BaseException{public:virtual void printError(){}};class NullPointerException : public BaseException{public:virtual void printError(){cout 空指针异常 endl;}};class OutofRangeExcrption : public BaseException{public:virtual void printError(){cout 越界异常 endl;}};void doWork(){//throw..//throw NullPointerException();throw OutofRangeExcrption();}void test01(){try{doWork();}catch (BaseException e){e.printError();}}int main(){test01();system(pause);return 0;}