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

    // 第二十四章 异常和错误处理
    //1异常
    /*#include <iostream>
    using namespace std;
    class wrong{};
    void error()
    {
       cout<<"出错"<<endl;
       throw wrong();
    }
    int main()
    {
    	try{
    	    error();
    	}
    	catch(wrong)
    	{
    	   cout<<"该错误已经解决"<<endl;
    	}
    	return 0;
    
    }*/
    
    #include <iostream>
    using namespace std;
    const int num=5;
    class people
    {
    public:
    	people(int size=num);
    	people(const people&r);
    	~people(){delete []p; }
    	people&operator=(const people&r);
    	int &operator[](int off)const;
    	int GetSize()const{ return size;}
    	friend ostream&operator<<(ostream&, const people&);
    	class wrong{};
    private:
    	int *p;
    	int size;
    };
    
    people::people(int Size):size(Size)
    {
    	//初始化指针p
        p = new int[size];
    	for(int i=0; i<size; i++){
    	    p[i] = 0;
    	}
    }
    //赋值运算符
    people&people::operator=(const people&r)
    {
    	//如果自己与自己赋值那么直接返回自己
    	if(this == &r){
    	    return *this;
    	}  
    	//这里需要先清空p指针,p是一个指针数组
    	delete []p;
    	int _size = r.GetSize();
    	p = new int[_size];
    	for(int i=0; i<_size; i++){
    	     p[i] = r[i];
    	}
    	return *this;
    }
    
    //复制构造函数
    people::people(const people&r)
    {
    	int _size = r.GetSize();
    	p = new int[_size];
    	for(int i=0; i<_size; i++){
    	    p[i] = r[i];
    	}
    }
    
    //重新运算符[]
    
    int&people::operator[](int off)const
    {
         int _size = GetSize();
    	 if(off >=0 && off < _size){//如果值在正常范围内
    	     return p[off]; 
    	 }
    	 throw wrong();
    	 return p[0]; //返回
    }
    
    //重新友元输出符 friend ostream&operator<<(ostream&, const people&)
    //友元函数的定义不用加类名也不用在前面加班friend
    ostream&operator<<(ostream& out, const people&r)
    {
    	for(int i=0; i<r.GetSize(); i++){
    	   out<<"p["<<i<<"]:"<<r[i]<<endl;
    	}
    	return out;
    }
    int main()
    {
    	people one(20);
    	try{
    		for(int i=0; i<100; i++){
    		   one[i] = i;
    		   cout<<"one["<<i<<"]赋值完毕..."<<endl;
    		}
        //下标运算符检查所传入的下标值,假如下标值超过数组所允许的范围,就抛出一个异常,异常类型为我们在第15行声明的wrong
    	}catch(people::wrong) //因为wrong类是在people类里面声明的,所以前面需要加上people::wrong
    	{
    	    cout<<"超过数组长度,不能继承执行赋值操作!"<<endl;
    	}
        return 0;
    }
    

      

  • 相关阅读:
    剑指Offer——斐波那契数列
    剑指Offer——旋转数组的最小数字
    剑指Offer——用两个栈实现队列
    剑指Offer——重建二叉树
    剑指Offer——从尾到头打印链表
    剑指Offer——替换空格
    Leetcode 153. Find Minimum in Rotated Sorted Array -- 二分查找的变种
    头条笔试后端开发
    渣浪电话面
    Leetcode 中Linked List Cycle 一类问题
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2715985.html
Copyright © 2011-2022 走看看