第二十四章 异常和错误处理 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; }
相关文章推荐
- C++入门经典 笔记 (第二十四章)处理异常和错误
- 第二十四章 异常和错误处理 1异常
- 第二十四章 异常和错误处理 3异常的派生
- 第二十四章 异常和错误处理 4创建异常类的成员函数
- 第二十四章 异常和错误处理 6异常类与模板的关系
- 错误处理(一)—— 被呼叫方拒绝接收呼叫。 (异常来自 HRESULT:0x80010001 (RPC_E_CALL_REJECTED))
- 【GoLang】GoLang 错误处理 -- 异常处理思路示例
- 开发常见错误解决(5)WSE3.0未处理的SoapHeaderException,未处理的SoapHeader异常
- PHP中的错误处理、异常处理机制
- 1.6 PHP异常和错误处理
- PHP如何抛出异常处理错误
- android studio常见错误及异常处理记录
- ASP.NET 4.0 生成 eurl.axd Http异常错误的处理方法 (汗IIS 怎这么多莫名其妙的问题)
- PL/SQL教程之五:异常错误处理
- 再谈PHP错误与异常处理
- js 异常处理 错误不弹出窗口
- C++【错误和异常的处理】
- SDE数据编辑过程中异常中断后产生错误的处理
- springMVC高级部分(数据校验,数据错误回显(自定义格式错误显示),拦截器,异常处理,文件上传,文件下载,springmvc运行流程以及springmvc和struts2对比)
- 错误处理和异常处理,你用哪一个