大佬教程收集整理的这篇文章主要介绍了C++异常处理机制,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
if (denominator == 0) cout << "ERROR: CAnnot divide by zero. \n"; else quotient = numerator / denominator;但如果类似的代码是返回商的函数的一部分,如下例所示:
//不可靠的除非函数 double divide(double numerator,double denominator) { if (denominator == 0) { cout << "ERROR: CAnnot divide by zero.\n"; return 0; } else return numerator / denominator; }函数通常通过返回一个预定的值来发出错误信号。在以上示例中,当尝试被零除时,函数返回 0。然而,这是不可靠的,因为 0 是除法操作的有效结果。即使函数显示错误消息,调用该函数的程序部分也不会知道何时发生了错误。因此,像这样的问题需要更复杂的错误处理技术。
double divide(double numerator,double denominator) { if (denominator == 0) throw String("ERROR: CAnnot divide by zero.\n"); else return numerator / denominator; }以下语句将导致异常被抛出:
try { //此处调用可能抛出异常的 //函数或对象成员函数 } catch(exception parameter) { //此处处理异常 } //根据需要重复catch代码段构造的第一部分是 try 块。它从关键字 try 开始,然后是任何可能直接或间接导致拋出异常的执行语句的代码块。try 块之后紧跟着一个或多个 catch 块,它们是异常处理程序。一个 catch 块以关键字 catch 开始,随后是一对圆括号,里面包含异常参数声明。
try { quotient = divide(num1,num2); cout<< "The quotient is " << quotient << endl; } catch (String exceptionString) { cout << exceptionString; }由于 divide 函数抛出的是一个类型为字符串的异常,因此必须有一个捕获字符串的异常处理程序。显示的 catch 块会捕获 exceptionString 形参中的错误消息,然后使用 cout 显示它。
//This program illustrates exception handling. #include <iostream> #include <String> using namespace std; // Function prototype double divide(double,doublE); int main() { int num1,num2; double quotient; cout << "Enter two numbers:"; cin >> num1 >> num2; try { quotient = divide(num1,num2); cout << "The quotient is " << quotient << endl; } catch (String exceptionString) { cout << exceptionString; } cout << "End of the program.\n"; return 0; } double divide(double numerator,double denominator) { if (denominator == 0) throw String ("ERROR: CAnnot divide by zero. \n"); else return numerator / denominator; }程序输出结果: @H_696_15@ Enter two numbers:12 0
//IntRange.h 的内容 #ifndef INTRANGE_H #definE intRANGE_H #include <iostream> using namespace std; class IntRange { private: int input; // For user input int lower; // Lower limit of range int upper; // Upper limit of range public: // Exception class class OutOfRange { }; // Empty class declaration // Member functions IntRange(int low,int high) // Constructor { lower = low; upper = high; } int getinput() { cin >> input; if (input < lower || input > upper) throw OutOfRange(); return input; } }; #endifIntRange 是一个简单的类,其成员函数 geTinput 允许用户输入一个整数值。该值与成员变量 lower 和 upper(由类构造函数初始化)进行比较。如果输入的值小于 lower 或大于 upper,则抛出异常,表示该值超出范围。否则,该值将从函数返回。
if (input < lower || input > upper) throw OutOfRange();throw 语句的参数 OutOfRange() 会使 OutOfRange 类的实例被创建并作为异常拋出。剩下的就是由一个 catch 块来处理异常。以下是一个示例:
catch (IntRange::OutOfRangE) { cout << "That value is out of range. \n"; }所有必须出现在 catch 块括号内的是异常类的名称。异常类是空的,所以不需要声明一个实际的参数。catch 块需要知道的只是异常的类型。
//This program demonstrates the use of obj ect-oriented exception handling. #include <iostream> #include "IntRange.h" using namespace std; int main() { IntRange range(5,10); int userValue; cout << "Enter a value in the range 5-10: "; try { userValue = range.getinput(); cout << "You entered " << userValue << endl; } catch (IntRange::OutOfRangE) { cout << "That value is out of range. \n"; } cout << "End of the program.\n"; return 0; }程序输出结果: @H_696_15@ Enter a value in the range 5-10: 12
以上是大佬教程为你收集整理的C++异常处理机制全部内容,希望文章能够帮你解决C++异常处理机制所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。