1 / 26
文档名称:

异常处理的基本语法异常处理的使用标准C.ppt

格式:ppt   大小:596KB   页数:26页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

异常处理的基本语法异常处理的使用标准C.ppt

上传人:guwutang 2025/2/27 文件大小:596 KB

下载得到文件列表

异常处理的基本语法异常处理的使用标准C.ppt

相关文档

文档介绍

文档介绍:该【异常处理的基本语法异常处理的使用标准C 】是由【guwutang】上传分享,文档一共【26】页,该文档可以免费在线阅读,需要了解更多关于【异常处理的基本语法异常处理的使用标准C 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。前言
一个优秀的软件应该具有很强的容错能力。C++语言能够提供异常处
理机制使得当某个函数出现异常时,能够将控制权交给调用它的函数进行处理。异常处理的主要任务是力争给用户提供机会,以排除环境错误,继续执行程序或者使程序给出恰当的提示。
异常处理是C++语言的一个重要特征。出错处理机制更加完美,它使
得异常的引发和处理不必在同一函数中。由于在大型软件中,函数之间有着明确的分工和复杂的调用关系,如果在每一处可能出现错误的地方都加入错误处理代码,不仅会使程序显得冗长,可读性不好,而且会产生代码膨胀,影响程序的效率。实际上在很多情况下,发现错误的函数往往不具备处理错误的能力。在C++程序中,针对这种情况可以引发一个异常,希
望它的调用者能够捕获这个异常并处理这个错误。如果调用者也不能处理这个错误,还可以继续传递给上级调用者去处理,这种传播会一直继续到异常被处理为止。如果程序始终没有处理这个异常,最终它会被传到C++
运行系统那里,运行系统捕获异常后通常只是简单地终止这个程序。本章将通过具体的例子讨论异常处理的使用方法。
异常处理的语法如下:
throw 表达式语法
throw 表达式
try 表达式语法
try
受保护的程序段语句
catch(异常类型)
异常处理语句;
catch(异常类型)
异常处理语句;
......
try、throw和catch语句实现异常处理,在程序的某个函数中发现异常时使用throw表达式抛出这个异常,这个异常被抛给该函数的调用者,调用者用catch捕捉该异常并进行相应的处理。当预测到某段程序将可能出现问题时,则将该段程序放在try语句之后,使该段程序得以有机会抛出异常。
异常类型与throw抛出的异常类性相匹配,当某个异常发生后,catch语句将逐个被检查,直到某个异常类型与throw抛出的异常类型相匹配,执行catch后面的异常处理程序。
若catch括号中是省略号,即catch(......),该catch可以捕捉所有的异常类型,语句一般放在所有catch语句的最后一个,否则其他catch语句就没有机会捕捉相应的错误类型了。
【 异常处理的基本语法】
当某个异常被捕捉并被相应的程序段处理后,系统将继续执行捕捉函数的其余部分。产生异常的函数和直到捕捉到异常的函数之间的所有调用链上的函数将从栈中删除。如果一个异常没有被任何函数捕捉到,则运行函数terminate将被调用,该函数的默认功能是调用abort函数终止程序的运行。
void fun()
{
int i;
double f;
char c;
...... //程序的其他部分
try //预期可能出现问题的地方,保护起来
{
//如果出现问题1,抛出一个整数(只是假设)
throw i;
//如果出现问题2,抛出一个双精度数(只是假设)
throw f;
//如果出现问题3,抛出一个字符(只是假设)
throw c;
}
一个异常处理的过程表示:
catch(int ii) { //相应处理}
catch(double ff) { //相应处理}
catch(char cc) { //相应处理}
...... //程序其他部分
}
异常的抛出和捕捉在同一函数中
//源程序开始
//
#include <iostream>
#include <string>
using namespace std;
class Person //声明Person类
{
protected:
char name[30]; //姓名
int age; //年龄
unsigned long ID; //身份证号
char gender; //性别
例 12-2
public:
Person(const char *name_t, const int age_t, const unsigned long id,const char
gender_t); //Person类的构造函数
};
Person::Person(const char *name_t, const int age_t, const unsigned long id,const char gender_t) //Person类的构造函数的实现
{
strcpy(name,name_t);
age=age_t;
ID=id;
gender=gender_t;
if(strlen(name)==0) throw "Invalid Person's name!";//有效性检查
if((age<0)||(age>200)) throw age; //有效性检查
if((gender!='M')&&(gender!='m')&&(gender!='F')&&(gender!='f'))
throw gender; //有效性检查
}
void fun() //捕获并处理Person类构造函数中抛出的异常
{
try
{
cout<<″fun line1″<<endl;
Person p1(″zhang″,10,12345566L,′M′); //类Person的对象p1
(续)
cout<<″fun line2″<<endl;
Person p2(″wang″,-1,22222222L,′F′); //类Person的对象p2
cout<<″fun line3″<<endl;
Person p3(″″,-1,33333333L,′M′); //类Person的对象p3
cout<<″fun line4″<<endl;
Person p4(″″,-1,44444444L,′F′); //类Person的对象p4
}
catch(char) //捕捉错误并进行处理
{
cout<<″Invalid gender!″<<endl;
}
catch(int) //捕捉错误并进行处理
{
cout<<″Invalid age!″<<endl;
}
catch(char * Msg) //捕捉错误并进行处理
{
cout<<″Invalid Name: ″<<Msg<<endl;
}

}
(续)
int main()
{
cout<<″before fun...″<<endl;
fun();
cout<<″end fun...″<<endl;
cout<<″in the main function!″<<endl;
return 0;
}
异常的引发和处理一般在不同函数中,底层函数可以专注于具体问题,上层调用函数可以在恰当的位置设计对不同类型的异常进行各种处理而不考虑底层函数是如何产生这个异常的。
演示异常处理的搜索层次
//源程序开始
//
#include <iostream>
#include <string>
using namespace std;
例 12-3
class Person //声明类Person
{
protected:
char name[30]; //姓名
int age; //年龄
unsigned long ID; //身份证号
char gender; //性别
public:
Person(const char *name_t, const int age_t, const unsigned long id,const char
gender_t); //Person类的构造函数
};
Person::Person(const char *name_t, const int age_t, const unsigned long id,const char
gender_t) //Person类的构造函数的实现
{
strcpy(name,name_t);
age=age_t;
ID=id;
gender=gender_t;
if(strlen(name)==0) throw "Invalid Person's name!"; //有效性检查
if((age<0)||(age>200)) throw age; //有效性检查
if((gender!='M')&&(gender!='m')&&(gender!='F')&&(gender!='f'))
throw gender; //有效性检查
}
(续)
void fun() //本函数内没有异常捕获和处理模块
{
cout<<″fun line1″<<endl;
Person p1(″zhang″,10,12345566L,′M′); //类Person的对象p1
cout<<″fun line2″<<endl;
Person p2(″wang″,-1,22222222L,′F′); //类Person的对象p2
cout<<″fun line3″<<endl;
Person p3(″″,-1,33333333L,′M′); //类Person的对象p3
cout<<″fun line4″<<endl;
Person p4(″″,-1,44444444L,′F′); //类Person的对象p4
}
int main() //主函数内有异常的捕获和处理模块
{
try
{
cout<<″before fun...″<<endl;
fun();
cout<<″end fun...″<<endl;
}
(续)
catch(char) //捕捉错误并进行处理
{
cout<<″Invalid gender!″<<endl;
}
catch(int) //捕捉错误并进行处理
{
cout<<″Invalid age!″<<endl;
}
catch(char * Msg) //捕捉错误并进行处理
{
cout<<″Invalid Name: ″<<Msg<<endl;
}
cout<<endl;
cout<<″in the main function!″<<endl;
return 0;
}
//源程序结束
(续)

最近更新

第25题答题情况分析及备考建议 16页

第22章背包问题求解 16页

2025年一盔一带安全教育教案最新版 12页

2025年现实个性朋友圈语录句子大全(精选50句.. 5页

2025年宁夏工业职业学院单招职业适应性测试题.. 62页

2025年宁夏工商职业技术学院单招职业倾向性测.. 60页

2025年宁夏工商职业技术学院单招职业倾向性测.. 61页

2025年现在的我变了的说说 10页

产品外发加工合同范本 6页

2025年现代诗歌合集 15页

2025年一号办公楼施工组织设计文件 17页

2025年宁夏工商职业技术学院单招职业适应性测.. 60页

2025年宁夏建设职业技术学院单招职业技能测试.. 61页

离散系统的综合 16页

2025年宁夏建设职业技术学院单招职业适应性测.. 64页

2025年宁夏建设职业技术学院单招职业适应性测.. 62页

2025年宁夏石嘴山市单招职业适应性测试题库ab.. 60页

2025年宁夏石嘴山市单招职业适应性测试题库附.. 63页

2025年冷却水管线冲洗方案 8页

2025年一年级语文比一比教案 14页

2025年一年级语文教案表格简单 42页

2025年出勤考勤管理系统SQL数据库 5页

纤维素分解菌与乳酸菌复合发酵条件的响应曲面.. 4页

2025年环境主管的基本职责[推荐] 9页

2025年一年级语文拼音专项训练题目 11页

2025年人教版六年级下册数学期末真题试卷及答.. 10页

公立医院主要领导经济责任审计技术方法分析 8页

高空作业考试题库 72页

金钥匙科技竞赛题库及答案 48页

2023年重庆育才自主招生考试物理试题 5页