throw的一些用法

yizhihongxing

当在程序中遇到错误或异常情况时,我们可以使用 throw 语句来抛出异常。 throw 语句由 throw 关键字和要抛出的值组成,其基本语法如下:

throw expression;

expression 可以是任意表达式,其返回值将作为异常信息输出。

下面我们来详细讲解 throw 的一些用法:

1. 抛出预定义异常

在 C++ 中,标准库定义了一些常见的异常类型,包括整型和字符串异常。我们可以使用这些类型抛出异常,即使用 throw 关键字后直接跟标准库定义的异常类型。下面是一些常见的异常类型以及它们的定义:

  • std::exception :所有标准异常类的基类
  • std::runtime_error :表示运行时错误
  • std::logic_error :表示逻辑错误
  • std::out_of_range :表示访问超出范围的元素
  • std::bad_alloc :表示内存分配失败

下面是一个简单的示例:

#include <iostream>
#include <stdexcept>
using namespace std;

int main() {
    int age;
    cout << "请输入你的年龄:";
    cin >> age;

    if (age < 0) {
        throw runtime_error("年龄不能为负数!");
    }

    cout << "你的年龄是:" << age << endl;

    return 0;
}

该程序可以判断输入的年龄是否为负数,如果是,则抛出 runtime_error 类型的异常,同时输出异常信息。

2. 自定义异常类

我们也可以自定义一个类来作为异常类型,以更好地描述异常信息。定义一个异常类时,该类需要继承自 std::exception 类,同时可以加入一些自定义成员变量和成员函数来扩展异常类的功能。

下面是一个自定义异常类的示例:

#include <iostream>
#include <exception>
#include <string>
using namespace std;

class MyException: public exception
{
public:
    MyException(const char* msg, int errorCode): m_errorCode(errorCode)
    {
        m_errorMsg = new char[strlen(msg) + 1];
        strcpy(m_errorMsg, msg);
    }

    virtual ~MyException() throw()
    {
        delete [] m_errorMsg;
    }

    virtual const char* what() const throw()
    {
        return m_errorMsg;
    }

    int getErrorCode() const
    {
        return m_errorCode;
    }

private:
    char* m_errorMsg;
    int m_errorCode;
};

int main() {
    int age;
    cout << "请输入你的年龄:";
    cin >> age;

    try {
        if (age < 0) {
            throw MyException("年龄不能为负数!", 1001);
        }

        cout << "你的年龄是:" << age << endl;
    } catch (const MyException& e) {
        cout << "异常编号:" << e.getErrorCode() << endl;
        cout << "异常信息:" << e.what() << endl;
    }

    return 0;
}

该程序自定义了一个 MyException 异常类,通过继承 std::exception 类来扩展异常类的功能。异常类中包含了一些自定义成员变量和成员函数,以便更好地描述异常信息。在 main 函数中,如果输入的年龄小于 0,则抛出自定义异常类型,并且输出异常信息及异常编号。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:throw的一些用法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • SpringBoot结合JWT登录权限控制的实现

    下面就来详细讲解“SpringBoot结合JWT登录权限控制的实现”的攻略。 第一步:添加Maven依赖 在pom.xml文件中添加以下Maven依赖: <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId…

    Java 2023年5月20日
    00
  • Java验证码功能的实现方法

    下面我就给你详细讲解一下Java验证码功能的实现方法。 什么是验证码? 验证码是指通过人工智能方式生成的一组由数字和字母组成的随机字符图形,通常用于区别对待人和机器,防止恶意软件暴力破解等安全问题。 Java验证码的实现方式 Java验证码的实现可以使用Java的第三方库或自己手写代码实现。下面介绍两种常用的实现方式: 第一种方式:使用Kaptcha生成验证…

    Java 2023年5月19日
    00
  • springboot整合EHCache的实践方案

    下面就是“springboot整合EHCache的实践方案”的完整攻略,过程中将会包含两条实例: 1. 添加依赖 首先,在pom.xml文件中添加如下依赖: <dependencies> <!– Spring Boot 依赖 –> <dependency> <groupId>org.springframew…

    Java 2023年5月20日
    00
  • 基于SpringMVC入门案例及讲解

    以下是关于“基于SpringMVC入门案例及讲解”的完整攻略,其中包含两个示例。 1. 前言 SpringMVC是一种常用的Java Web开发框架,其核心思想是基于MVC模式来实现Web应用程序开发。本攻略将详细讲解基于SpringMVC入门案例及讲解,包括SpringMVC的基本概念、配置方法以及一个示例。 2. SpringMVC的基本概念 以下是Sp…

    Java 2023年5月16日
    00
  • 【9种】ElasticSearch分词器详解,一文get!!!| 博学谷狂野架构师

    ElasticSearch 分词器 作者: 博学谷狂野架构师 GitHub:GitHub地址 (有我精心准备的130本电子书PDF) 只分享干货、不吹水,让我们一起加油!? 概述 分词器的主要作用将用户输入的一段文本,按照一定逻辑,分析成多个词语的一种工具 什么是分词器 顾名思义,文本分析就是把全文本转换成一系列单词(term/token)的过程,也叫分词。…

    Java 2023年5月8日
    00
  • JAVA十大排序算法之基数排序详解

    JAVA十大排序算法之基数排序详解 基本概念 基数排序是按照低位先排序,也就是先排个位,再排十位,以此类推。这样从最低位开始排序,直到最高位排序完成之后,数列就变成了一个有序序列。 算法步骤 基数排序的过程可以描述如下: 取得数组中的最大数,并取得位数; arr为原始数组,从最低位开始取每个位组成radix数组; 对radix进行计数排序(利用计数排序适用于…

    Java 2023年5月19日
    00
  • 详解Java内部类与对象的打印概念和流程

    下面我将对“详解Java内部类与对象的打印概念和流程”进行详细讲解。 Java内部类的概念 在Java中,内部类定义在另一个类的内部并与其它类成员变量的作用域相同。内部类提供了一种更加合理、封装的方式来组织和分离代码,它让重要的代码组合在更小的、更容易维护的单元中。内部类的创建和使用方式与接口和类非常相似,通常在外部类中创建内部类的对象。 内部类可以分为四种…

    Java 2023年5月26日
    00
  • MySQL之JSON类型字段的使用技巧分享

    MySQL之JSON类型字段的使用技巧分享 在MySQL 5.7及以上版本中,除了常见的数据类型之外,还新增了一个JSON类型字段。JSON类型的字段可以存储JSON格式的数据,对于存储半结构化数据非常方便。本文将详细讲解JSON类型字段的使用技巧,包括JSON格式、创建、插入、更新、查询等操作。 1. JSON格式的数据 JSON(JavaScript O…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部