C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计
“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 用户自定义类的对象传递异常 异常和异常处理 C++异常处理机制 自定义exception类的派生类对象传递异常 异常和异常处理 C++异常处理机制 用类对象传递异常 异常处理中的退栈和对象析构 C++语言程序设计
基本知识 a C++语言程序设计
11.3 用类对象传递异常 throw语句所传递的异常,可以是各种类型的:整型、实型、字符型、指针,等等。也可以用类对象来传递异常。 用来传递异常的类称为异常类。异常类可以是用户自定义的,也可以是系统提供的exception类。 C++语言程序设计
11.3 用类对象传递异常 C++提供了一个专门用于传递异常的类:exception类。可以通过exception类的对象来传递异常。 exception类的定义可以表述如下: class exception { public: exception(); //默认构造函数 exception(char *); //字符串作参数的构造函数 exception(const exception&); exception& operator= (const exception&); virtual ~exception(); //虚析构函数 virtual char * what() const; //what()虚函数 private: char * m_what; }; C++语言程序设计
11.3 用类对象传递异常 其中和传递异常最直接有关的函数有两个: 带参数的构造函数。参数是字符串,一般就是检测到异常后要显示的异常信息。 what()函数。返回值就是构造exception类对象时所输入的字符串。可以直接用插入运算符“<<”在显示器上显示。 只要显示关于异常的信息,则可以直接使用exception类。如果除了错误信息外,还需要显示其他信息,或者作其他的操作,则可以定义一个exception类的派生类,在派生类中可以定义虚函数what的重载函数。 C++语言程序设计
C++语言程序设计 例:不但能检测到0作为除数的异常,发布相应的信息,而且程序还要继续运行,直到结束程序运行。 void main() { double x,y,z; cout<<"输入两个实数 x 和 y :"; while (cin >> x >> y) { try { z = divide(x,y); } catch (runtime_error err) //exception handler { cout << err.what() << "\n"; cout << "输入一对新的实数: "; continue; } // end of handler cout << "x 除以 y 等于 " << z << "\n"; cout << "输入下一组数 <q 表示结束>: "; cout << "程序结束,再见!\n"; 用C++标准异常类,处理除法溢出 #include <iostream> #include <exception> using namespace std; double divide(double a, double b) { if (b == 0) { throw runtime_error("输入错误:除数不可以等于0 !"); } return a/b; C++语言程序设计