zoukankan      html  css  js  c++  java
  • 第二十四章 异常和错误处理 3异常的派生 简单

    // 第二十四章 异常和错误处理 3异常的派生
    #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(){ return size; }
    	int GetSize()const{ return size;}
    
    	class wrong{};
    	class offset{};
    	//class Big:public offset{};  
    	//class Nav:public offset{}; 
    	class Big{};
    	class Nav{};
    	class Small{};
    	class Zero{};
    private:
    	int *p;
    	int size;
    };
    
    people::people(int Size):size(Size)
    {
    	 cout<<"调用构造函数"<<endl;
    	 if(Size == 0){
    		 throw Zero();
    	 }
    	 if(Size < 10){
    	     throw Small();
    	 }
    	 if(Size > 10000){
    	     throw Big();
    	 }
    	 if(Size < 1){
    	     throw Nav();
    	 }
         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();
    	//这里还是没有太消化得了,const int&people::operator[](int off)const
    	//在该函数内为什么调用的GetSize()函数声明方式一定要是int GetSize()cosnt{ return size;}
    	//如果是int GetSize(){ return size;}
    	//error C2662: “people::GetSize”: 不能将“this”指针从“const people”转换为“people &”
    	//从这句错误语句可以理解一点
    	//本方法内用的people是用的const people,也就是对people只能可读操作
    	//还是弄不太懂
      	if(off>=0 && off < GetSize())
    	{
    	     return p[off];
    	}
    	throw wrong();
    	return p[0];    
    }
    
    
    int main()
    {
    	try{
    	    people one(-2);
    		for(int i=0; i<100; i++){
    		    one[i] = i;
    			cout<<"one["<<i<<"]赋值完毕....."<<endl;
    		}	
    	}catch(people::wrong){
    	    cout<<"超过数组长度,不能继承执行赋值操作"<<endl;
    	}
    	catch(people::offset)
    	{
    	    cout<<"下标值过大或者为负数"<<endl;
    	}
    	catch(people::Big)
    	{
    	    cout<<"下标值过大"<<endl;
    	}
    	catch(people::Small){
    	    cout<<"下标值过小"<<endl;
    	}
    	catch(people::Zero){
    	    cout<<"下标值为0"<<endl;
    	}
    	catch(people::Nav){
    	    cout<<"下标值为负数"<<endl;
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    《大话数据结构》最小生成树——Prim算法
    《大话数据结构》图的BFS和DFS
    寒假集训日志(三)——数论
    寒假集训日志(二)——最小生成树,拓扑排序,欧拉回路,连通路
    set
    寒假集训日志(一)——图,最短路问题
    经典的图论算法,C++描述
    动态数组
    stack and queue
    最长递增子序列,最长公共子串,最长公共子序列问题,最长公共增长子序列问题
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2719202.html
Copyright © 2011-2022 走看看