理论教育 面向对象程序设计:自定义异常类

面向对象程序设计:自定义异常类

时间:2023-10-25 理论教育 版权反馈
【摘要】:在使用异常类时,除了可以使用系统定义的几种异常类外,还可以自定义异常类。用户可以定义继承exception类的派生类,也可以定义其他的异常类,通过抛出自定义的异常类对象对catch模块进行处理。如果是自定义的异常类,则可以根据设计需要来实现异常类。在例9.5的main函数中,在接收数据时,检测可能的两种异常,一种是数据个数已经超过5,一种是数值大于100。

面向对象程序设计:自定义异常类

在使用异常类时,除了可以使用系统定义的几种异常类外,还可以自定义异常类。用户可以定义继承exception类的派生类,也可以定义其他的异常类,通过抛出自定义的异常类对象对catch模块进行处理。如果继承exception类,主要是重写what()函数,让它返回异常的错误信息。如果是自定义的异常类,则可以根据设计需要来实现异常类。

在程序设计中,需要设计者在分析问题时全面考虑,增加适当的异常检测和捕获处理,提高程序的健壮性,定义异常类可以为用户提供更多的异常信息,为处理异常提供方便。

【例9.5】定义一个exception类的派生类Full Arrayexception,在数组已经放满数据时产生异常,定义一个自定义的异常类,当数值大于100时,产生异常。在main函数中,接收输入的数据并放在数组中,考虑异常并处理。

程序的运行结果如下:

0 input a number(0~100):1

1 input a number(0~100):2

2 input a number(0~100):3

3 input a number(0~100):400

自定义异常信息为:输入数据超过100!

3 input a number(0~100):5

4 input a number(0~100):6

数组已经放满数据!

接收到的有效数据为:1 2 3 5 6

程序运行结束!

在例9.5的main函数中,在接收数据时,检测可能的两种异常,一种是数据个数已经超过5,一种是数值大于100。当数值大于100时,发生TooBig类异常,被捕获后,输出异常信息“输入数据超过100!”,并重新返回循环开始处执行;当数据个数到5 时,产生Full Arrayexception类异常对象,被捕获后,输出“数组已经放满数据!”,并结束while循环,执行循环后的语句。

综合实训

异常处理

【实训目的】

1.理解异常和异常处理的概念。

2.灵活运用异常捕获和异常处理。

【实训内容】

设计一个集合类,数据成员有集合当前大小、集合最大容量、集合数据指针;成员函数有构造函数、析构函数、添加元素、删除元素、判断元素是否在集合中等。要求在添加元素时如果已经达到最大容量,则抛出集合已经满的异常;在删除元素时,如果集合已经空,则抛出集合空的异常。在为集合的数据分配堆空间时,考虑内存分配失败异常。设计类,并测试类。

【实训设计】

参考程序代码如下:

程序的运行结果如下:

构造集合对象:1 2 3 4

1.添加元素1

1元素已经在集合中! 不用添加!

2.添加元素5

添加5成功!

3.添加元素7

集合满异常:集合已经满了!

4.删除元素1

删除1成功!

5.删除元素6

6不在集合中,不能删除!

6.删除元素2

删除2成功!

7.删除元素3

删除3成功!(www.daowen.com)

8.删除元素4

删除4成功!

9.删除元素5

删除5成功!

10.删除元素5

集合空异常:集合已经空!

集合对象析构结束!

项目小结

在本项目中学习了C++的异常处理机制,在程序运行时,异常经常可能发生,在设计时使用异常处理机制,可以有效地防止如内存泄漏、不正常退出等问题,提高程序的健壮性和可读性。在程序设计中,在发生异常的位置throw 抛出异常,使用try语句对可能发生异常的代码段检测,catch捕获异常并处理异常。异常类型可以是系统定义的exception类及其子类,也可以是用户自定义的异常类或其他变量类型。一般使用异常类,可以为异常类处理提供更多的信息。

课后练习

一、选择题

1.下面关于异常处理机制常用语句结构的是( )。

A.try-catch-throw B.try-throw-catch

C.throw-try-catch D.throw-catch-try

2.程序的错误一般分为三种,分别为( )。

A.语法错误、逻辑错误和运行错误

B.语法错误、计算错误和运行错误

C.语法错误、计算错误和编译错误

C.语法错误、逻辑错误和编译错误

3.有语句“throw 100;”,可以捕获这个异常的语句是( )。

A.catch(double e){......//异常处理代码}

B.catch(int e){......//异常处理代码}

C.catch(float e){......//异常处理代码}

D.catch(exception&e){......//异常处理代码}

4.在使用new 操作符申请内存空间时,可能产生的异常类( )的对象。

A.bad_typeid B.bad_cast

C.bad_alloc D.bad_exception

5.下面语句关于异常描述正确的是( )。

A.异常处理可以避免异常

B.异常的产生与程序运行的环境有关

C.编译错误也是异常的一种

D.可以通过编程实现不发生异常

二、编程题

1.计算圆的面积,输入圆的半径,但半径必须大于0,当小于等于0时抛出异常,捕获异常并在异常处理中要求重新输入。

2.设计除数为0的异常类,输入两个数分别为被除数和除数,当除数为0时,抛出异常,捕获异常,在异常处理中输出异常类中的异常信息。

资源推荐

1.C++网站 http://www.cplusplus.com

2.C++类库参考 https://msdn.microsoft.com/zh-cn/library/cscc687y.aspx

3.百度传课 http://www.chuanke.com/course/72351176561000448_________2.html

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈