1)异常是一种程序控制机制,与函数机制独立和互补
函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它依附于栈结构,却可以同时设置多个异常类型作为网捕条件,从而以类型匹配在栈机制中跳跃回馈.
2)异常设计目的:
栈机制是一种高度节律性控制机制,面向对象编程却要求对象之间有方向、有目的的控制传动,从一开始,异常就是冲着改变程序控制结构,以适应面向对象程序更有效地工作这个主题,而不是仅为了进行错误处理。
函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它依附于栈结构,却可以同时设置多个异常类型作为网捕条件,从而以类型匹配在栈机制中跳跃回馈.
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;
};