C++中try throw catch异常处理的用法示例

yizhihongxing

C++中异常处理是一种用于处理程序运行期间发生的错误或异常情况的机制。一般情况下,C++中的异常处理包括三个关键字:try、throw、catch。

  • try:try语句块中的代码是需要被监控的代码。当try语句块中的代码抛出异常时,异常会被传递到catch块中进行处理。
  • throw:throw语句抛出一个异常,它抛出的值可以是任意类型的,包括一个简单的数字类型或一个自定义的类型。
  • catch:catch语句块是用来处理try块中抛出的异常的。当try块中抛出异常时,catch块中的代码会被执行。

下面我们分别针对try、throw、catch关键字做详细介绍,并给出两个示例说明。

try关键字

try语句块是需要被监控的代码。当try语句块中的代码抛出异常时,异常会被传递到catch块中进行处理。

try语句块的语法如下:

try {
   // 可能会抛出异常的代码块
}
catch (exception_type ex) {
   // 处理异常的代码块
}

在try语句块中,当出现异常时,异常会被抛出。抛出异常的代码可以写在catch块中,如下示例:

try {
  // 可能抛出异常的代码
  throw 20;  // 抛出一个整数类型的异常
}
catch (int ex) {
  // 处理异常的代码
  cout << "Caught an exception: " << ex << endl;
}

throw关键字

throw语句用于抛出一个异常。当执行throw语句时,程序将终止当前流程,并且异常值将被抛出。

throw语句的语法如下:

throw exception_value;

其中,exception_value为抛出的异常值,可以是任何数据类型。

以下示例演示了如何使用throw抛出自定义异常:

#include <iostream>
using namespace std;

class MyException { };   // 定义一个自定义异常类

int main() {
   try {
      throw MyException();   // 抛出自定义异常
   }
   catch (MyException ex) {  // 捕捉自定义异常
      cout << "Caught MyException" << endl;
   }

   return 0;
}

以下示例演示了如何使用throw抛出内置类型异常:

#include <iostream>
using namespace std;

int main() {
   try {
      throw 20;  // 抛出整数类型的异常
   }
   catch (int ex) {   // 捕捉整型异常
      cout << "Caught an exception: " << ex << endl;
   }

   return 0;
}

catch关键字

catch语句块是用来处理try块中抛出的异常的。当try块中抛出异常时,catch语句块中的代码会被执行。catch语句块中的代码根据异常类型来处理异常。

catch语句块的语法如下:

try {
   // 可能会抛出异常的代码块
}
catch (exception_type ex) {
   // 处理异常的代码块
}

以下是一个示例程序,演示了如何使用catch来捕捉异常并处理异常:

#include <iostream>
using namespace std;

int main() {
   try {
      int a = 0;
      int b = 10;
      int c = b / a;  // 除数为0,抛出异常
   }
   catch (exception ex) {
      cout << "Caught an exception: " << ex.what() << endl;
   }

   return 0;
}

当a为0时,程序执行到第6行时,会抛出一个异常并终止当前的流程。catch语句块会捕捉该异常并输出该异常信息。

示例一

下面的示例程序演示了如何使用try、throw、catch关键字来计算平均数,如果分母为0,则抛出异常,并提示错误信息。

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

double calculateAverage(int sum, int count) {
   if (count == 0) {   // 分母为0,抛出异常
      throw runtime_error("Divide by 0 exception.");
   }

   return static_cast<double>(sum) / static_cast<double>(count);   // 强制类型转换,防止整型相除产生0
}

int main() {
   int sum = 10;
   int count = 0;
   double average = 0;

   try {
      average = calculateAverage(sum, count);
   }
   catch (exception ex) {
      cout << "Caught an exception: " << ex.what() << endl;
   }

   return 0;
}

该程序中,calculateAverage函数用于计算平均数,当count为0时会抛出一个运行期错误,Catch语句块会捕捉该运行时错误并输出错误信息。

示例二

下面的示例程序演示如何使用try、throw、catch关键字来模拟栈,并在栈空时抛出异常。

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

class myStack {
   private:
      int *stack;
      int top;
   public:
      myStack() {
         stack = new int[10];
         top = -1;
      }
      void push(int value) {
         if (top >= 9) {   // 栈已满,抛出异常
            throw runtime_error("Stack overflow!");
         }
         stack[++top] = value;
      }
      int pop() {
         if (top < 0) {   // 栈已空,抛出异常
            throw runtime_error("Stack underflow!");
         }
         return stack[top--];
      }
};

int main() {
   myStack aStack;

   try {
      aStack.push(1);
      aStack.push(2);
      aStack.push(3);
      cout << aStack.pop() << endl;
      cout << aStack.pop() << endl;
      cout << aStack.pop() << endl;
      cout << aStack.pop() << endl;   // pop一个空栈,抛出异常
   }
   catch (exception ex) {
      cout << "Caught an exception: " << ex.what() << endl;
   }

   return 0;
}

该程序中,模拟了一个栈的数据结构,如果栈满了则抛出溢出异常,如果栈为空则抛出栈下溢异常,通过使用try、throw、catch关键字模拟了栈的操作过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中try throw catch异常处理的用法示例 - Python技术站

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

相关文章

  • 基于C++实现一个简单的音乐系统

    基于C++实现一个简单的音乐系统攻略 1. 确定功能需求 在实现一个简单的音乐系统之前,需要明确该系统的功能需求。可能的需求包括但不限于: 音乐播放 音乐暂停 音乐停止 音乐切换 播放列表管理 音量调节等 2. 确定系统设计方案 给定功能需求以后,需要对系统进行设计,包括但不限于: 系统模块设计 数据处理设计 界面设计 设计系统结构 3. 实现代码 3.1 …

    C 2023年5月23日
    00
  • Go语言设置JSON的默认值操作

    设置JSON的默认值是指当JSON中不存在某个键或该键对应的值为空时,使用预设的默认值来填充这个键对应的值。在Go语言中,可以使用“omitempty”选项或者自定义UnmarshalJSON函数来实现设置JSON的默认值操作。 下面是实现设置JSON默认值的两种方法及其示例说明: 方法一:使用“omitempty”选项 在结构体中,在JSON标记中添加“o…

    C 2023年5月23日
    00
  • C++超详细讲解函数对象

    C++超详细讲解函数对象 函数对象,也称为仿函数,是一种重载了()运算符并可以像函数一样被调用的对象。在C++中,函数对象可以看作是一个类,它可以像一个函数一样去调用。 为什么需要函数对象? 在许多场景中,我们需要对容器(如vector、map等)中的元素进行排序、查找或者进行相关的算术计算。这个时候我们常常使用STL中提供的STL算法函数,其中就用到了函数…

    C 2023年5月22日
    00
  • MySQL实例精讲单行函数以及字符数学日期流程控制

    MySQL实例精讲单行函数以及字符数学日期流程控制 MySQL提供了许多单行函数来处理数据,例如字符串处理、数学计算、日期时间处理等。同时,MySQL也提供了常见的流程控制功能,如if语句、case语句等。本文将详细讲解MySQL的单行函数以及流程控制功能。 单行函数 MySQL的单行函数包括了字符串函数、数值函数、日期函数等,下面将分别介绍。 字符串函数 …

    C 2023年5月22日
    00
  • c++中的stack和dequeue解析

    C++中的Stack和Dequeue解析 Stack Stack概述 栈的英文为 stack,它是一种数据结构,特点是后进先出(last in first out,LIFO)。栈有两个基本操作,一个是进栈(也叫压栈,push),一个是出栈(也叫弹栈,pop)。进栈操作会让数据从栈顶进入栈中,而出栈操作会让数据从栈顶弹出。 C++中提供了 stack 模板类,…

    C 2023年5月22日
    00
  • C++的指针,引用和STL详解

    C++的指针,引用和STL详解 指针 指针是C++语言中非常重要的一个概念,它是一个变量,其值为另一个变量的地址。指针的用途很广泛,它经常被用于动态的内存分配和数据结构中。 指针的定义和使用 指针的定义使用符号*,例如: int *p; 这个语句定义了一个名为p的指向int类型的指针。指针变量必须初始化才能使用,一般有两种方式: 直接初始化赋值,例如: in…

    C 2023年5月22日
    00
  • 用C++面向对象的方式动态加载so的方法

    很好,用C++面向对象的方式动态加载so的方法可以通过以下步骤实现: 1. 准备工作 在开始使用C++动态加载so前,需要安装相关的开发库,具体步骤可以参考系统文档或者官方网站的说明。以Ubuntu为例,安装GCC开发环境和动态库加载库libdl的命令为: $ sudo apt-get install build-essential $ sudo apt-g…

    C 2023年5月22日
    00
  • C语言中程序环境和预处理的详细图文讲解

    针对“C语言中程序环境和预处理的详细图文讲解”这一主题,我会为你提供一份完整攻略。本攻略主要分两部分:程序环境和预处理。下面就分别进行详细讲解。 程序环境 什么是程序环境? 程序环境指的是程序执行的环境,包括操作系统、硬件设备等因素。C语言的程序需要在特定的环境下才能执行。 程序的执行过程 当程序运行时,它需要在内存中占用一定的空间。程序在执行过程中分为以下…

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