C++异常的主要目的是为了设计容错程序提供语言级支持。

即异常使得在程序设计中包含错误处理功能更加容易,以免事后采取一些严格的错误处理方式。

异常的灵活性和相对方便性激励着程序员在条件允许的情况下在程序设计中加入错误处理功能。

总之,异常是这样一种特性,类似于类,可以改变你的编程方式。

较新的C++编译器将异常合并到语言中。

exception头文件定义了exception类。C++可以把它用作其他异常类的基类。

代码可以引发exception异常,也可以将exception用作基类

有一个名为what()的虚函数,它返回一个字符串,该字符串的特征随实现而异。

而且what()函数是一个虚方法,所以可以在基类当中重新定义它。

 #include <iostream>
class bad_hmean:public std::exception
{
public:
const char * what() {return "bad arguments to hmean()";}
...
};
class bad_gmean:public std::exception
{
public:
const char * what() {return "bad arguments to gmean()";}
...
}; try{
...
}
catch(std::exception & e)
{
cout<<e.what()<<endl;
...
}

如果不想以不同的方式处理这些派生而来的异常,可以在同一个基类处理程序中捕获它们。

否则,可以分别捕获它们;

C++定义了很多基于exception类的异常;

 1、stdexcept头文件的异常类

头文件stdexcept定义了其他几个异常类。首先,该文件定义了logic_error和runtime_error类。

它们都是以公有方式从exception派生而来的。

一般而言,logic_error系列异常表明存在可以通过编程修复的问题;

runtime_error系列异常表明存在无法避免的问题;

所有这些错误类有相同的常规特征,它们之间的主要区别在于:不同类名让您能够分别处理每种异常。

另一方面,继承关系能够让您一起处理它们(如果你愿意的话)。

2.bad_alloc异常和new

对于使用new导致的内存分配问题,C++最新的处理方式是让new引发bad_alloc异常。

头文件new包含bad_alloc类的声明,它是exception类公有派生而来的。

但在以前,当无法分配请求的内存量时,new返回一个空指针。

 // newexcp.cpp  -- the bad_alloc exception
#include <iostream>
#include <new>
#include <cstdlib>
using namespace std; struct Big
{
double stuff[];
}; int main()
{
Big * pb;
try {
cout<<"Trying to get a big block of memory:\n";
pb = new Big[];
cout<<"Got past the new request:\n";
}
catch(bad_alloc & ba)
{
cout<<"Caught the exception!\n";
cout<<"ba.what()"<<endl;
exit(EXIT_FAILURE);
}
cout<<"Memory successfully allocated\n";
pb[].stuff[]=;
cout<<pb[].stuff[] <<endl;
delete [] pb;
return ;
}

3.空指针和new

很多代码都是在new失败时返回空指针时编写的。

为处理new的变化,有些编译器提供了一个标记(开关),让用户选择所需的行为。

当前,C++标准提供了一种在失败时返回空指针的new,其用法如下

int * pi = new (std::nothrow) int;

int * pa = new (std::nowthrow) int[500];

使用这种new,可将上面程序的核心代码修改如下:

Big * pb;

pb = new(std::nothrow) Big [10000];

if(pb ==0)

{

cout<<"Could not allocate memory. Bye.\n";

exit(EXIT_FAILURE);

}

C++_异常7-exception类的更多相关文章

  1. Java异常基础Exception

    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类描述各种不同的异常. ...

  2. Java基础-异常(Exception)处理

    Java基础-异常(Exception)处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.异常的概述 什么是异常?Java代码在运行时期发生的问题就是异常.在Java中,把异 ...

  3. java异常继承何类,运行时异常与一般异常的区别

    一.基本概念 Throwable是所有异常的根,java.lang.ThrowableError是错误,java.lang.ErrorException是异常,java.lang.Exception ...

  4. 每天一点点java---继承exception类来实现自己的异常类

    package prac_1; /** * <p>Title: 捕获异常和实现自己的异常类</p> * <p>Description: 通过继承Exception类 ...

  5. Java -- 异常的捕获及处理 -- Exception类与RuntimeException类

    7.3 Exception类与RuntimeException类 Exception类与RuntimeException类的联系与区别??? 例:字符串变为整型 Class : RuntimeExce ...

  6. Java异常 Exception类及其子类

    C语言时用if...else...来控制异常,Java语言所有的异常都可以用一个类来表示,不同类型的异常对应不同的子类异常,每个异常都对应一个异常类的对象. Java异常处理通过5个关键字try.ca ...

  7. 网易云课堂_C++程序设计入门(下)_第9单元:白公曾咏牡丹芳,一种鲜妍独“异常”_第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理

    第9单元 - 作业5:OJ编程 - 使用异常进行图形类的错误处理 查看帮助 返回   温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前 ...

  8. Visual C++ 异常(Exception)常见问题 (原文标题:A Visual C++ Exception FAQ)

    Visual C++ 异常(Exception)常见问题 版权:Doug Harrison 2001 – 2007 翻译:magictong(童磊) 2011年3月 原文地址:http://membe ...

  9. muduo网络库源码学习————Exception类

    Exception类是为异常捕获而设计,可以获得异常的信息以及栈的回溯信息 (原来的代码没有demangle成员函数,输出的格式比较难看,加了demangle成员函数,利用demangle成员函数可以 ...

随机推荐

  1. 刷题向》关于一道像差分约束的数学题BZOJ1045(NORMAL)

    关于这道题,乍一看很像查分约束,但是实际上这道题是可以用数学方法直接解决的. 这道题在蓝书上有原题,可以看到题解,在此再赘述一遍 首先,最终每个小朋友的糖果数量可以计算出来,等于糖果总数除以n,用av ...

  2. 最新Eclipse Photon安装tomcat

    发现最新版的eclipse竟然没有tomcat配置项,可能是因为spring boot很火,所以server默认就不包含tomcat,需要手动安装组件,  Version: Photon Releas ...

  3. 使用 tpl 标签和 for 读取对象属性值中的数组

    来源于<sencha touch 权威指南> ----------------------------- 只摘抄app.js代码: Ext.require(['Ext.form.Panel ...

  4. WCF项目问题2-无法激活服务,因为它需要 ASP.NET 兼容性。没有未此应用程序启用 ASP.NET 兼容性。请在 web.config 中启用 ASP.NET 兼容性,或将 AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode 属性设置为 Required 以外的值。

    无法激活服务,因为它需要 ASP.NET 兼容性.没有未此应用程序启用 ASP.NET 兼容性.请在 web.config 中启用 ASP.NET 兼容性,或将 AspNetCompatibility ...

  5. Java 集合框架必记框架图

  6. MySQL性能调优与架构设计——第7章 MySQL数据库锁定机制

    第7章 MySQL数据库锁定机制 前言: 为了保证数据的一致完整性,任何一个数据库都存在锁定机制.锁定机制的优劣直接应想到一个数据库系统的并发处理能力和性能,所以锁定机制的实现也就成为了各种数据库的核 ...

  7. Head First Python之2函数模块

    模块就是一个包含Python代码的文本文件,以.py结尾. 第三方模块都在PyPI(python package index)上,可使用PyPI发布你的模块,供他人使用. 注释代码 # coding= ...

  8. 关于Gridview激发了未处理的事件“RowDeleting”错误的处理

    关于通过RowCommend事件执行删除操作时,提示 Gridview激发了未处理的事件“RowDeleting”错误的处理: <asp:TemplateField HeaderText=&qu ...

  9. java类创建时里面成员执行的先后顺序

    静态代码块在类第一次使用的时候执行一次,在构造函数执行之前执行.只要用到类,哪怕new对象(比如只声明变量)也会被执行,且只执行一次.一般用于对类进行初始化. 先执行静态代码块,静态成员(谁在前就先执 ...

  10. WINDOWS权限大牛们,请进

    大家好, 我遇到一个问题,我的一台windows7去访问另一个电脑的共享,输入账号密码后,老是说密码不正确.而其他电脑去访问共享,密码账号密码后都OK 我想知道原因是什么?