15、面向对象-异常处理机制

一、什么是异常

例如open()、creat()函数会有返回值,来判断是否成功执行。

异常是一种程序控制机制,与函数机制独立和互补。异常就是冲着改变程序控制结构,以适应面向对象程序更有效地工作这个主题。在错误处理方面获得最大的好处。

二、异常的基本语法

1、遇到问题抛出异常(throw 0)

抛出的类型不确定,不受函数的返回值限制

2、尝试执行函数

try

{
}

3、接收异常(catch)

例:catch(int)      //接收整型

{
}

#include <iostream>

using namespace std;

int Div(int x,int y)
{
	if(0 == y)
	{
		//return -1;
		
		//throw 0;       //抛出异常
		throw 'a';
	}

	return x / y;
}

int main()
{
	int a,b;

	cin >> a >> b;
	
	try{                             //把可能抛出异常的代码,放在try语句中
		cout << Div(a,b) << endl;
	}
	catch(int)
	{
		cout << "zero exception" << endl;
	}
	catch(char)
	{
		cout << "char exception" << endl;
	}

	return 0;
}

4、特点:跨越函数

将函数的异常交给上一个函数来实现,不需要再在本函数实现,本函数专注于实现具体功能

int DDiv(int x,int y)
{
	if(0 == y)
	{
		throw 0;               //函数嵌套的情况下,返回值为0了,异常抛出就不会返回,单纯停止函数运行
	}
	return x / y;
}

int Div(int x,int y)
{
	return DDiv(x,y);
}

5、限制异常抛出的类型

1、void func() throw (A, B, C , D); //这个函数func()能够且只能抛出类型A B C D及其子类型的异常。

2、如果在函数声明中没有包含异常接口声明,则次函数可以抛掷任何类型的异常,例如:
    void func();

3、一个不抛掷任何类型异常的函数可以声明为:void func()  throw();

6、抛出对象异常(优先使用引用)

1、抛出一个对象(引用接就一个对象,拷贝接两个对象)

抛出一个对象,接收拷贝一个对象,一共有两个对象
抛出:throw Test()

接收;catch(Test t)

{
}

2、抛出对象地址(new delete 需要手动释放)

throw new Test;

catch(Test *t)

{

        delete t;       //手动释放
}

三、使用标准程序库异常

使用异常库基类对象接收异常库衍生类对象

  1 #include <iostream>
  2 #include <exception>
  3 
  4 using namespace std;
  5 
  6 int main()
  7 {
  8     try{
  9     int *p = new int[-1];
 10     }
 11 
 12     catch(exception &e)      //基类接收任意一个派生类对象
 13     {
 14         cout << e.what() << endl;
 15     }
 16 
 17     delete p;
 18 
 19     return 0;
 20 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值