第二十四章 异常和错误处理 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;
}

  

原文地址:https://www.cnblogs.com/xiangxiaodong/p/2715985.html