try_catch 捕捉异常错误

版权声明:请在征得作者同意的情况下,可以进行非盈利性引用。引用请注明出处:“作者:慕华思弦 转载地址” 字样,以尊重作者的劳动成果,并保持良好的版权意识。 https://blog.csdn.net/Superman___007/article/details/82730602

运行错误:由于在编写代码造成的错误,运行时可以出现异常错误。
       系统会直接让此程序结束。
捕获错误:
    throw-try-catch
    throw抛出错误    try在代码保护段或者调用函数中捕获异常,catch识别错误
    try
    {
        //代码保护段
    }
    catch(表达式)//用于区分错误类型
    {
        
    }
    ...
    catch(...)
    {
    }
    注:如果用户不捕获错误,系统则默认处理(运行结束),如果抛出错误,则
        使用权交给用户。
    3C++定义相关错误类标准       子类
        头文件: stdexcept
        class Exception
        {
        public:
                exception1(const char* msg):code(msg){}
                virtual const char* what() const
                {
                        return code.c_str();//code对象
                }
        protected:
                string code;
        };
                                      |bad_alloc              |underlow_error
            父类                   |runtime_error <----|overlow_error
        Exception《-------  |bad_cast               |range_error
                                      |bad_typeid
                                      |bad_exception      |length_error
                                      |logic_error      <----|domain_error    
                                      |ios_base::failure   |invalid_argument
        
        bad_alloc  New态动态空间分配失败
        bad_typied 对于执行void*时出错  
        range_error 区间错误。。。。
        invalid_argument 向方法或函数传递无效的参数

 

   try_catch 捕捉异常错误 .

#include<iostream>
#include<stdio.h>
using namespace std;
//函数:用于显示某一个数组元素的内容
void fun(int buf[],int index)//访问第index个元素的内容
{
	//inde=10000
	FILE* fp;
	if(index>2)
		throw buf;//整型指针
	cout<<buf[index]<<endl;
}
int main()
{
	//throw 100; 不能在代码保护外抛出错误

	cout<<"程序开始运行"<<endl;
	try//捕获此代码段
	{
/*
		int a,b;
		cin>>a>>b;//输入	
		//b不能为0,如果一当为0系统结束此程序,自动抛出异常
		if(0==b)//不能让系统捕获错误,用户自动抛出错误
			throw b;

		int result=a/b;
		cout<<a<<"/"<<b<<"="<<result<<endl;
*/	
		int buf[3]={1,2,3};
		fun(buf,10000);//调用函数引起的异常
	}
	catch(int a)//类型
	{
		cout<<a<<"除数不能为0"<<endl;
	}
	catch(int* a)
	{
		cout<<a<<"数组访问越界"<<endl;
	}
	catch(...)//默认错误 ---注意必须在cacth最下面
	{
		cout<<"有一个错误"<<endl;
	}

	cout<<"程序运行结束"<<endl;

	return 0;
}

   try_catch的使用 .

#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
//将某信息写入到path文件中
void saveMsg(const char* path,const char* msg)
{
//封装为一个对象 ifstream   ofstream
//1打开
	FILE* fp=fopen(path,"wb"); 
	if(NULL==fp)
		throw fp;
//2操作 fread  fwrite  二进制     文件fscanf  fgetc fgets  fprintf fputc fputs
	int ilen=10000000;
	if(ilen>strlen(msg))
		throw "写入长度大于数组元素长度";
	fwrite(msg,ilen,1,fp);
//3关闭
	fclose(fp);

}

int main()
{
	try
	{
		saveMsg("./aa","hello");
	}
	catch(FILE* fp)
	{
		cout<<"文件打开失败"<<endl;
	}
	catch(const char* p)
	{
		cout<<p<<endl;
	}
}

 

   try_catch 实现求三角形的面积 .

#include<iostream>
#include<math.h>
#include<stdexcept>
using namespace std;

//已知三角形三边  p=a+b+c/2  sqrt(p(p-a)(p-b)(p-c))  
double area(double a,double b,double c)
{
//传递参数可以失效
	if(a<=0||b<=0||c<=0)
		throw invalid_argument("三边长度<=0");
	if(a+b<=c || a+c<=b || b+c<=a )
		throw invalid_argument("两边之和<小第三边");

	double p=(a+b+c)/2;
	return sqrt(p*(p-a)*(p-b)*(p-c));

}
int main()
{
	try
	{
		//失败
		cout<<"aera:"<<area(1,1,1)<<endl;
	}
	catch (exception &e)//指向子类的虚函数----多态
	{
		cout<<e.what()<<endl;
	}
}

 

展开阅读全文

没有更多推荐了,返回首页

逝去的芳华

春 的 芬 芳    ❀❀
夏 的 清 香      ☀☀  
秋 的 艳 阳        ☂☂    
冬 的 晨 霜         ❄❄    
    是岁月编译了你的芳华        
          还是,你打包压缩了岁月的流淌?

诗名可到出处 ----> 博客首页  ----> 图片也可以传送哦( 提示 : smile 蟹蟹 )


        

你有多久没有朗读了?很久了吧。

           因为很多人都觉得朗读,那是学生时代的事情,或者说它只属于一小部分人。 朗读属于每一个人。正如你看
到下面这些文字,是否想深情的朗读几句?                                                                                                                            

遇     见
                 ——董卿
                 古往今来,有太多太多的文字,在描写着各种各样的遇见。“蒹葭苍苍,白露为霜,所谓伊人,在水一方。”这是
            撩动心弦的遇见;“这位妹妹,我曾经见过。”这是宝玉和黛玉之间,初次见面时欢喜的遇见;"幸会,今晚你好吗?"
     这是《罗马假日》里,安妮公主糊里糊涂的遇见;“遇到你之前,我没有想过结婚,遇到你之后,我结婚没有想过
      和别的人。”这是钱钟书和杨绛之间,决定一生的遇见。 所以说,遇见仿佛是一种神奇的安排,它是一切的开始。
              也希望从今天开始,《朗读者》和大家的遇见,能够让我们彼此之间,感受到更多的美好。因为从某种意义上来
                     说。世间一切,都是遇见,就像冷遇见暖,就有了雨,春遇到冬,有了岁月;天遇见地,有了永恒;人遇见了人,有了生命。
那么,《朗读者》遇见了你们,又会怎样呢?                                                                                                 
<br

最新评论