zoukankan      html  css  js  c++  java
  • 第二十四章 异常和错误处理 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;
    }
    

      

  • 相关阅读:
    OZ Report 오즈 리포트 개발
    日期 英文 英语 韩文 韩语
    行合并
    R内存扩展 win7内存扩展
    计算日期函数
    C#颜色 Color.FromArgb ColorTranslator 16进制
    Phone
    浏览器 UserAgent
    context.Request.Files post 上传问题件
    The connection to adb is down, and a severe error has occured.
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2719226.html
Copyright © 2011-2022 走看看