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

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日

相关文章

  • Golang加密解密之RSA(附带php)

    Golang加密解密之RSA RSA是非对称加密中常用的算法。首先要了解非对称加密和对称加密的区别: 对称加密:加解密使用同一把密钥 非对称加密:加解密使用一对公私钥 非对称加密最常见的方式就是RSA,接下来我们就主要介绍RSA的加密解密过程。 生成RSA公私钥对 Golang Golang中使用crypto库来生成RSA公私钥对。下面是生成2048位RSA…

    C 2023年5月22日
    00
  • C指针原理教程之C快速入门

    “C指针原理教程之C快速入门”是一篇讲解C语言指针的指南,它详细地介绍了C指针的概念、基础与进阶知识,适用于所有初学者或需要加深自己基础知识的人。下面将为你详细讲解这篇攻略。 C指针原理教程之C快速入门:介绍指针 本节主要介绍指针的概念和基础知识,包括定义指针、指针的运算等。同时,本节也将介绍指针的应用,例如数组、函数调用等。 C指针原理教程之C快速入门:指…

    C 2023年5月22日
    00
  • java抛出异常的几种情况小结

    让我详细讲解一下“Java抛出异常的几种情况小结”的完整攻略。 1. Java抛出异常的概念 Java中的异常是指在程序运行时发生了错误或异常情况而无法正常执行的情况。简单来说,当程序出现意料之外的错误或者问题,抛出异常是必须的。 2. Java异常的分类 Java异常可以分为两类:检查异常和非检查异常。 2.1 检查异常 当程序出现问题时,会产生一个检查异…

    C 2023年5月23日
    00
  • C语言动态内存管理malloc柔性数组示例详解

    C语言动态内存管理malloc柔性数组示例详解 什么是动态内存管理 动态内存管理是避免预定义变量长度无法适应实际大小的常见方法。在C语言中,动态内存分配和回收函数是malloc()和free()。 malloc的基本语法和用法 malloc()的原型如下: void *malloc(size_t size); 其中,参数size是所需内存块的字节数。该函数返…

    C 2023年5月23日
    00
  • 一文详解Qt中线程的实际应用

    一、什么是Qt中的线程? Qt中的线程是指在Qt框架下使用的线程,它是建立在操作系统线程之上的一个高层抽象。Qt中的线程分为QThread线程和QtConcurrent线程两种。其中,QThread线程是比较传统的线程实现方式,而QtConcurrent则是在Qt4中新增的一种线程实现方式,相对而言更加简单。 二、为什么要使用Qt中的线程? 在许多程序中,为…

    C 2023年5月22日
    00
  • C程序 打印简单的半右星金字塔图案

    以下是详细讲解“C程序 打印简单的半右星金字塔图案”的完整使用攻略。 程序代码 #include <stdio.h> int main() { int i, j, row; printf("请输入要打印的行数:"); scanf("%d", &row); for(i=1; i<=row; i+…

    C 2023年5月9日
    00
  • 清除canvas画布内容(点擦除+线擦除)

    清除canvas上绘制的内容是一个常见的需求。主要有两种方式可以实现:点擦除和线擦除。 一、点擦除 点擦除是指通过鼠标或手指操作,在canvas上逐点清除绘制内容,实现的效果类似于橡皮擦。 1.1 实现方案 点擦除的实现方案是:在canvas上监听鼠标或手指操作,当检测到鼠标或手指在canvas上移动时,获取当前点坐标,然后将该点坐标周围的像素点的颜色设置为…

    C 2023年5月22日
    00
  • 使用Jackson来实现Java对象与JSON的相互转换的教程

    使用Jackson来实现Java对象与JSON的相互转换需要遵循以下步骤: 添加Jackson依赖 首先需要在项目中添加Jackson依赖。如果你正在使用Maven,则可以在pom.xml文件中添加以下依赖关系: <dependency> <groupId>com.fasterxml.jackson.core</groupId&…

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