C++异常处理
来源:互联网 发布:linux系统如何上网 编辑:程序博客网 时间:2024/06/06 00:44
程序中的异常主要分为两种:
1:编译时的异常 ->主要是语法错误,比较容易修改。
2.运行时的异常->程序逻辑错误,运行时(崩溃,或结果异常)。
《抛出异常》
c++的异常处理手机主要有三部分有:try(检查),throw(抛出),catch(捕获)。通常,监测异常情况的程序语句包含在try中,如果try块中发生了异常。则用throw处理。异常由catch捕获,并对异常进行处理。
c++构造函数可以抛出异常。c++标准指明析构函数不能、也不应该抛出异常。
原因:
1,如果析构函数抛出异常,则异常点之后的程序不会扫行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。
2,通常异常发生时,c++的机制调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。
格式:
try
{
被检查语句
throw 异常
}
catch(异常类型1)
{
进行异常处理的语句1
}
catch(异常类型2)
{
进行异常处理的语句 2
}
捕获异常catch()
例:
#include <iostream>
using namespacestd;
class CExceptionClass
{
private:
char *m_szMessage;
public:
CExceptionClass(constchar *_message)
{
m_szMessage=newchar[strlen(_message)+1];
strcpy(m_szMessage, _message);
}
void show()
{
cout<<m_szMessage<<endl;
}
~ CExceptionClass()
{
delete []m_szMessage;
}
};
int main(int argc,constchar * argv[])
{
cout<<"主程序开始……"<<endl;
try
{
int nFlag=0;
cout<<"1---------throw int "<<endl;
cout<<"2---------throw char "<<endl;
cout<<"3---------throw char* "<<endl;
cout<<"4---------throw float "<<endl;
cout<<"5---------throw CExeeptionClass "<<endl;
cout<<"Please choose: "<<endl;
cin>>nFlag;
if (nFlag<1||nFlag>5)
{
cout<<"输入错误。"<<endl;
return0;
}
switch (nFlag)
{
case1:
throw100;//抛出的必须是数据,不能是类型。
break;
case2:
throw'A';
break;
case3:
throw"A";
break;
case4:
throw"100.0ff";
break;
case5:
throw new CExceptionClass("A");
break;
}
}catch (int)
{
cout<<"catching int"<<endl;
}
catch(char)
{
cout<<"catching char"<<endl;
}
catch (char*)
{
cout<<"catching char *"<<endl;
}
catch(float)
{
cout<<"catching float"<<endl;
}
catch(CExceptionClass *ex)
{
cout<<"catching CExceptionClass"<<endl;
}
catch(...)
{
cout<<"catching any throw"<<endl;
}
cout<<"退出主程序。"<<endl;
return0;
}
- c#中的异常处理
- 异常处理 - [C++]
- c异常处理
- Objective-c异常处理
- C语言异常处理
- c 异常处理
- C 异常处理设计
- [C++] 异常处理
- C++“异常处理”
- objective-c 异常处理
- 【C++】栈空栈满异常处理
- C++:异常处理
- c++_10: 异常处理
- 【C#】异常处理
- C/C++异常处理
- C++‘异常’处理机制
- C语言异常处理
- 异常处理---C语言
- 初学c++
- Java中PreparedStatement和Statement的用法区别
- iOS7 UUID唯一标识
- JavaScript调用C++函数
- 基於jquery的驗證類庫(4) .
- C++异常处理
- 利用javax.mail写的一个简单发邮件的类
- 支持串口loadx命令下载
- 自定义Notification
- 左右值树常规操作的逻辑
- sparse coding理解
- camera前后置gpio口影响
- GridView显示行号
- Java基本入门知识