异常的层次结构(继承在异常中的应用)

案例:设计一个数组类 MyArray,重载[]操作,
数组初始化时,对数组的个数进行有效检查
index < 0  抛出异常eNegative
index = 0  抛出异常eZero
index > 1000  抛出异常eTooBig
index < 10  抛出异常eTooSmall

eSize类是以上类的父类,实现由参数构造、并定义virtual void printErr()输出错误

#include <iostream>

using namespace std;


class MyArray
{
public:
	MyArray(int len);

	//在类的内部定义一个类,叫内部类
	class eSize
	{
	public:
		eSize(int size)
		{
			this->size = size;
		}
		
		virtual void printErr() = 0;
	protected:
		int size;
	};

	class eNegative:public eSize
	{
	public:
		eNegative(int size):eSize(size)
		{
			;
		}
		virtual void printErr()
		{
			printf("数组长度不能小于 0, 当前长度为%d\n", size);
		}
	};
	class eZero:public eSize
	{
	public:
		eZero(int size):eSize(size)
		{
			;
		}
		virtual void printErr()
		{
			printf("数组长度不能等于 0, 当前长度为%d\n", size);
		}
	};
	class eTooBig:public eSize
	{
	public:
		eTooBig(int size):eSize(size)
		{
			;
		}
		virtual void printErr()
		{
			printf("数组长度不能大于 1000, 当前长度为%d\n", size);
		}
	};
	class eTooSmall:public eSize
	{
	public:
		eTooSmall(int size):eSize(size)
		{
			;
		}
		virtual void printErr()
		{
			printf("数组长度不能小于 10, 当前长度为%d\n", size);
		}
	};
	
};

MyArray::MyArray(int len)
{
	if (len < 0)
		throw eNegative(len);
	else if (len == 0)
		throw eZero(len);
	else if (len > 1000)
		throw eTooBig(len);
	else if (len < 10)
		throw eTooSmall(len);
}

int main()
{
	try
	{
		MyArray a(1001);
	}
	catch (MyArray::eSize &e)
	{
		e.printErr();//多态实现
	}

	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值