C++的异常类(exception classes) 详解

异常类(exception classes)包含4种基类,bad_cast, bad_alloc,runtime_error, logic_error;

runtime_error: 错误只有当程序运行时, 才能检测出来;

logic_error: 应用程序检测出的逻辑错误.

其中bad_cast, bad_alloc使用默认构造器, runtime_error, logic_error, 必须使用string(C-style或stl)进行初始化;

用户定义的类也可以继承(inherit)自异常类, 并初始化相应的参数;

代码如下:

/*
 * cppprimer.cpp
 *
 *  Created on: 2013.11.28
 *      Author: Caroline
 */

/*eclipse cdt, gcc 4.8.1*/

/* setlocale example */
#include <iostream>
#include <string>
#include <stdexcept>  

using namespace std;  

class out_of_stock : public std::runtime_error
{
public:
    //初始化基类的runtime_error
    explicit out_of_stock(const std::string &s) : std::runtime_error(s) {}
};  

class id_mismatch : public std::logic_error
{
public:
    explicit id_mismatch(const std::string &s) : std::logic_error(s) {}
    id_mismatch(const std::string &s, const std::string &lhs, const std::string &rhs) :
        std::logic_error(s), left(lhs), right(rhs) {}
    const std::string left, right;
};  

struct My_food
{
    My_food(const std::string fi, const int fn) : food_id(fi), food_num(fn) {}
    My_food& operator+=(const My_food& rhs);
    std::string food_id;
    int food_num;
};  

My_food& My_food::operator+=(const My_food& rhs)
{
    if(this->food_id != rhs.food_id)
        throw id_mismatch("wrong id", this->food_id, rhs.food_id);
    this->food_num += rhs.food_num;
    return *this;
}  

int main (void)
{
    My_food M1("Apple", 3), M2("Pear", 2), M3("Apple", 2);
    try{
        M1 += M3;
        std::cout << M1.food_id << ":" << M1.food_num << std::endl;
        M1 += M2;
    }catch(const id_mismatch &e){
        std::cerr << e.what() << ": left id("
                << e.left <<") right id(" << e.right << ")" << std::endl;
    }
}

输出:

Apple:5
wrong id: left id(Apple) right id(Pear)

作者:csdn博客 Spike_King

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, my eclipse
, const
, std
, const参数error
, rhs
, bad_cast
常见异常(Runtime
system.exception异常、runtimeexception异常、remoteexception异常、parseexception异常、servletexception异常,以便于您获取更多的相关知识。

时间: 2024-09-30 19:39:59

C++的异常类(exception classes) 详解的相关文章

异常类Exception

异常类Exception: <% Class Exception Private IWindow Private ITarget Private ITimeOut Private IMode Private IMessage Private IHasError Private IRedirect Public Property Let Window(ByVal Value) IWindow = Value End Property Public Property Get Window() Win

iOS开发:Cocoa—类与对象详解

我们可以在/usr/include/objc/objc.h 和 runtime.h 中找到对 class 与 object 的定义: typedef struct objc_class *Class; typedef struct objc_object { Class isa; } *id; Class 是一个 objc_class 结构类型的指针:而 id(任意对象) 是一个 objc_object 结构类型的指针,其第一个成员是一个 objc_class 结构类型的指针.注意这里有一关键的

Java技术_基础技术(0003)_类执行顺序详解+实例(阿里面试题)+详细讲解+流程图

Java技术_基础技术(0001)_后台模拟调用action Java技术_基础技术(0002)_中间件启动class加载顺序(以tomcat为例) Java技术_基础技术(0003)_类执行顺序详解+实例(阿里面试题)+详细讲解+流程图 Java技术_基础技术(0004)_eclipse远程调试tomcat 基础技术: 对于java类各个成员的执行顺序,现拿出阿里的面试题作为样例(例子非常好,是用心出的题),在这里重新说明一下java类执行顺序的原则. 源码下载(包含题.结果.分析过程) 一.

iOS网络编程之四——请求类NSURLRequest使用详解

iOS网络编程之四--请求类NSURLRequest使用详解 一.引言         在前面几篇博客中,介绍了iOS开发中的网络编程相关内容并且介绍了常用了两个平行的网络框架NSURLSession和NSURLConnection.无论是NSURLSession类还是NSURLConnection类,其网络请求都是通过NSURLRequest类进行发起的,本篇博客将介绍NSURLRequest类的用法和其中请求属性的设置.         前几篇博客地址如下: 1.iOS网络框架介绍:http

JavaScript中定义类的方式详解_javascript技巧

本文实例讲述了JavaScript中定义类的方式.分享给大家供大家参考,具体如下: Javascript本身并不支持面向对象,它没有访问控制符,它没有定义类的关键字class,它没有支持继承的extend或冒号,它也没有用来支持虚函数的virtual,不过,Javascript是一门灵活的语言,下面我们就看看没有关键字class的Javascript如何实现类定义,并创建对象. 一.定义类并创建类的实例对象 在Javascript中,我们用function来定义类,如下: function Sh

玩转JavaScript OOP - 类的实现详解_javascript技巧

概述 当我们在谈论面向对象编程时,我们在谈论什么? 我们首先谈论的是一些概念:对象.类.封装.继承.多态. 对象和类是面向对象的基础,封装.继承和多态是面向对象编程的三大特性. JavaScript提供了对象却缺乏类,它不能像C#一样能显式地定义一个类. 但是JavaScript的函数功能非常灵活,其中之一就是构造函数,结合构造函数和原型对象可以实现"类". 对象和类的概念 对象 "对象"是面向对象编程中非常重要的一个概念,一个对象是一个"东西"

python魔法方法-属性转换和类的表示详解_python

类型转换魔法 类型转换魔法其实就是实现了str.int等工厂函数的结果,通常这些函数还有类型转换的功能,下面是一些相关的魔法方法: •__int__(self) •转换成整型,对应int函数. •__long__(self) •转换成长整型,对应long函数. •__float__(self) •转换成浮点型,对应float函数. •__complex__(self) •转换成 复数型,对应complex函数. •__oct__(self) •转换成八进制,对应oct函数. •__hex__(s

Python文件操作类操作实例详解_python

本文讲述了Python文件操作类的操作实例,详细代码如下: #!/usr/bin/env python #!/usr/bin/env python #coding:utf-8 # Purpose: 文件操作类 #声明一个字符串文本 poem=''' Programming is fun测试 When the work is done if you wanna make your work also fun: use Python! ''' #创建一个file类的实例,模式可以为:只读模式('r'

JAVA中的异常与错误处理详解

  异常与错误: 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它.Java中使用异常类来表示异常,不同的异常类代表了不同的异常.但是在Java中所有的异常都有一个基类,叫做Exception. 错误: 它指的是一个合理的应用程序不能截获的严重的问题.大多数都是反常的情况.错误是VM的一个故障(虽然它可以是任何系统级的服务