C++异常处理机制全解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++异常处理机制全解

▌异常处理(Exception handling)

●返回一个错误码进行异常处理(C语言):

例:

bool func(float a, float b, float& c){

if(b==0){

return false;

}

c=a/b;

return true;

}

int main()

{

float a=10;

float b=0;

float c=0;

bool result=func(a, b, c);

if(!result){

cout<<"The func fails!"<

return 0;

}

else{

cout<<"The func succeeds!"<

}

//func1();

//func2();

return 0;

}

●try-throw-catch语句(C++);

例:

void func(float a, float b, float& c){

if(b==0){ //如果b为0,则抛出字符串“Divided by zero!”;

throw "Divided by zero"; //throw出来的东西可以是任何类型,甚至可以是类的对象;}

c=a/b;

}

int main()

{

float a=10;

float b=0;

float c=0;

try{ //测试条件;

func(a, b, c);

//func1();

//func2();

}

catch(const char* str){ //捕获异常信息;

cout<

}

//func4();

return 0;

}

★try:诊断异常代码;

例:

try{

//可能出现异常的情况

}

☆可能出现异常的三种情况:

①可执行语句;

②一个函数调用;

③一个函数调用另一个函数;

★throw:抛出错误信息;

例:

if(分母==0){

throw 参数(只有一个,可以是任何类型,甚至是一个对象)

}

★catch:捕获异常信息;

例:

catch(参数类型参数){ //只能有一个参数,这里的形参可以被省略,但是省略后不能输出异常信息,依然可以捕获;

cout<<参数<

}

☆☆☆如果throw抛出了异常,异常类型如果与catch块后面的类型匹配,catch块内的代码将会被执行,在try语句后面可以有多个catch块,程序会寻

找第一个相匹配的catch块,实行catch块的语句代码,然后跳到最后一个catch块的下一行代码,如果没有匹配的catch块,则异常返回上一层try-

catch语句,如果没有相应的catch发现,程序将会终结。

★catch块不能访问try块里面定义的临时变量。

★try-throw-catch的三种写法:

例:

//1

void func(){

float x, num, den;

... //initialize num and den

try{ //把操作放到try块里面,不良的写法;

if(den==0){

throw "Divided by zero";

}

x=num/den;

}

//...

}

//2

float divide(float a, float b){ //在函数体中实现操作,推荐写法;

if(b==0){

throw "divided by zero";

}

return a/b;

}

void func(){

float x, num, den;

//initialize num and den

try{

x=divide(num, den);

}

catch(const char* error){

cout<

}

//...

}

//3

float divide(float a, float b){

if(b==0){

throw "divided by zero";

}

return a/b;

}

float middle(float a, float b){ //嵌套写法,推荐写法;return divide(a, b);

}

void func(){

float x, num, den;

//initialize num and den

try{

x=middle(num, den);

}

catch(char* error){

cout<

}

//...

}

▌再次抛出一个异常:

例:

#include

using namespace std;

float divide(int a, int b){

if(b==0){

throw "divided by zero";

}

return float(a)/float(b);

}

float middle(int a, int b){

try{

return divide(a, b);

}

catch(const char* str){

cout<<"Caught by function middle."<

throw str;

}

}

相关文档
最新文档