//第二十四章 异常和错误处理 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;
}