异常

来源:互联网 发布:ps4适合女生的游戏知乎 编辑:程序博客网 时间:2024/06/05 07:54
1)异常是一种程序控制机制,与函数机制独立和互补
     函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它依附于栈结构,却可以同时设置多个异常类型作为网捕条件,从而以类型匹配在栈机制中跳跃回馈.
2)异常设计目的:
    栈机制是一种高度节律性控制机制,面向对象编程却要求对象之间有方向、有目的的控制传动,从一开始,异常就是冲着改变程序控制结构,以适应面向对象程序更有效地工作这个主题,而不是仅为了进行错误处理。

异常设计出来之后,却发现在错误处理方面获得了最大的好处。



案例:设计一个数组类 MyArray,重载[]操作,
数组初始化时,对数组的个数进行有效检查 
index<0 抛出异常 eNegative  
index = 0 抛出异常 eZero  
    3)index>1000抛出异常 eTooBig 
    4)index<10 抛出异常 eTooSmall 
    5)eSize类是以上类的父类,实现有参数构造、并定义virtual void printErr()输出错误。

#include <iostream>using namespace std;class MyArray{public:MyArray(int len){if(len < 0)throw eNegative(len);if(len == 0)throw eZero(len);if(len < 10)throw eTooSmall(len);if(len > 1000)throw eTooBig(len);this->len = len;m_p = new int[len];}~MyArray(){if(m_p != NULL)delete []m_p;}int &operator[](int index){return m_p[index];}public:class eSize{public:eSize(int size){this->size = size;}virtual void printErr() = 0;protected:int size;};class eNegative : public eSize{public:eNegative(int len) : eSize(len){}void printErr(){printf("异常 数组长度 < 0, 长度:%d\n",size);}};class eZero : public eSize{public:eZero(int len) : eSize(len){}void printErr(){printf("异常 数组长度 = 0, 长度:%d\n",size);}};class eTooSmall : public eSize{public:eTooSmall(int len) : eSize(len){}void printErr(){printf("异常 数组长度 < 10, 长度:%d\n",size);}};class eTooBig : public eSize{public:eTooBig(int len) : eSize(len){}void printErr(){printf("异常 数组长度 > 1000, 长度:%d\n",size);}};private:int len;int *m_p;};int main4_1(){try{MyArray a(10000);}catch (MyArray::eSize &e)    //利用多态{e.printErr();}catch (...){printf("捕捉到其他类型的异常\n");}system("pause");return 0;};



原创粉丝点击