您的位置:首页 > 其它

第二十四章 异常和错误处理 5异常类的虚函数

2012-10-11 00:19 323 查看
//第二十四章 异常和错误处理 5异常类的虚函数
#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(){};
virtual int Get(){ return osize;}
virtual void show(){
cout<<"丢出offset异常"<<endl;
cout<<"下标值"<<osize<<"出错"<<endl;
}
protected:
int osize;
};

class Big:public offset{
public:
Big(int Size):offset(Size){}
virtual void show(){
cout<<"丢出Big异常"<<endl;
cout<<"下标值为"<<offset::osize<<endl;
}
};
class Nav:public offset{
public:
Nav(int Size):offset(Size){}
virtual void show(){
cout<<"丢出Nav异常"<<endl;
cout<<"下标值为"<<offset::osize<<endl;
}
};
class Small{
public:
Small(int Size):_size(Size){}
~Small(){}
virtual int Get(){ return _size;}
virtual void show(){
cout<<"丢出Small异常"<<endl;
cout<<"下标值为:"<<_size<<endl;
}
protected:
int _size;
};
class Zero: public Small{
public:
Zero(int Size):Small(Size){}
virtual void show()
{
cout<<"丢出Small异常"<<endl;
cout<<"下标值为:"<<Small::_size<<endl;
}
};
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;
big.show();
}
catch(people::Small small){
//cout<<"数组值过小,值为:"<<small.Get()<<endl;
small.show();
}
catch(people::Zero zero){
//cout<<"下标值为0"<<endl;
zero.show();
}
catch(people::Nav nav){
// cout<<"下标值为负数"<<endl;
nav.show();
}
catch(people::offset offset){
//cout<<"下标值过大或者过小"<<endl;
offset.show();
}
return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: