第二十四章 异常和错误处理 4创建异常类的成员函数

//第二十四章 异常和错误处理 4创建异常类的成员函数
#include <iostream>
using namespace std;
#include <iostream>
using namespace std;
const int num=5; 
class people
{
public:
	people(int Size=num);
	~people(){ delete []p; };
	int&operator[](int off);
	const int&operator[](int off)const;
	int GetSize()const{ return size;}

	class wrong{};
	class offset{
		public:
			offset(int Size):osize(Size){};
			~offset(){};
			int Get(){ return osize;}
		private:
			int osize;
	};

	class Big:public offset{
	public:
		Big(int Size):offset(Size){}
	}; 
	class Nav:public offset{
	public:
		Nav(int Size):offset(Size){}
	}; 
	class Small{
		public:
			Small(int Size):_size(Size){}
			~Small(){}
			int Get(){ return _size;}
		private:
			int _size;
	};
	class Zero: public Small{
	public:
		Zero(int Size):Small(Size){}
	};
private:
	int *p;
	int size;
};

people::people(int Size):size(Size)
{
	 cout<<"调用构造函数"<<endl;
	 if(Size == 0){
		 throw Zero(Size);
	 }
	 if(Size < 10){
	     throw Small(Size);
	 }
	 if(Size > 10000){
	     throw Big(Size);
	 }
	 if(Size < 1){
	     throw Nav(Size);
	 }
     p = new int[Size];
	 for(int i=0; i<Size; i++)
	 {
	     p[i] = 0;
	 }
}

int&people::operator[](int off)
{
	if(off>=0 && off < GetSize())
	{
	     return p[off];
	}
	throw wrong();
	return p[0];
}

//一样,只是该函数内的值是不可更改并且返回值也是不可更改的
const int&people::operator[](int off)const
{
	int Size = GetSize();
  	if(off>=0 && off < GetSize())
	{
	     return p[off];
	}
	throw wrong();
	return p[0];    
}

int main()
{
	try{
	    people one(9);
		for(int i=0; i<100; i++){
		   one[i] = i;
		   cout<<"one["<<i<<"]:"<<i<<endl;
		}
	}
	catch(people::wrong){
	    cout<<"超过数组长度,不能继续进行赋值操作"<<endl;
	}
	catch(people::Big big){
		cout<<"数组值过大,值为:"<<big.Get()<<endl;
	}
	catch(people::Small small){
		cout<<"数组值过小,值为:"<<small.Get()<<endl;
	}
	catch(people::Zero zero){
	     cout<<"下标值为0"<<endl;
	}
	catch(people::Nav nav){
	     cout<<"下标值为负数"<<endl;
	}
	catch(people::offset){
	     cout<<"下标值过大或者过小"<<endl;
	}
    return 0;
}

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值