全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

c++中异常处理(trycatch)从入门到精通教程

发布时间:2023-06-05 11:05:00
发布人:lxl

c++异常处理

  在编写程序时,可能会遇到一些异常情况,比如在读取文件时发生了错误、网络连接中断等等。C++ 提供了异常处理的机制,可以帮助我们编写更健壮的程序。

  什么是异常?

  异常是由程序中出现的不正常情况(比如错误或意外情况)所引起的事件或情况。异常可能是由硬件故障、程序编写错误等原因引起的。当程序出现异常时,就会抛出一个异常对象,并且程序会终止执行。

  异常处理

  异常处理是一种在程序运行时处理异常的机制。在 C++ 中,异常处理通常包括以下三个关键字:

  try:包含可能引发异常的代码块。

  catch:处理抛出的异常。

  throw:引发一个异常。

  异常处理的一般形式如下:

try {
// 可能引发异常的代码块
} catch (type1 exception1) {
// 处理对应类型的异常
} catch (type2 exception2) {
// 处理对应类型的异常
} catch (...) {
// 处理所有其他类型的异常
}

   在这里,catch 块按照它们的类型依次接收和处理可能引发的异常。如果 try 块中的代码引发了一个异常,那么程序就会跳过 try 块的剩余代码,并开始执行第一个与该异常类型匹配的 catch 块。

  如果 try 块中引发的异常类型与任何一个 catch 块的类型都不匹配,那么程序就会执行最后一个 catch 块,该 catch 块的参数类型为 (…),表示可以处理任何类型的异常。

  下面是一个简单的示例程序,演示如何使用异常处理机制:

#include <iostream>

int main() {
try {
int a = 10, b = 0, c;
if (b == 0) {
throw "Division by zero";
}
c = a / b;
std::cout << "Result: " << c << std::endl;
} catch (const char* msg) {
std::cerr << "Exception caught: " << msg << std::endl;
}
return 0;
}

   在这个程序中,我们对变量 b 的值是否为 0 进行了判断,并在其为 0 时抛出了一个异常。在 catch 块中,我们捕获了该异常,并输出一条错误消息。

  自定义异常

  在程序中,我们也可以自定义异常。示例代码如下:

#include <iostream>
#include <exception>

class MyException : public std::exception {
virtual const char* what() const throw() {
return "My Exception occurred";
}
} myex;

int main() {
try {
throw myex;
} catch (std::exception& e) {
std::cout << e.what() << std::endl;
}
return 0;
}

   在这个程序中,我们通过继承 std::exception 类来自定义一个异常(称为 myex)。我们重写了其 what() 方法,以便在程序抛出异常时输出一条自定义的错误消息。在 try 块中,我们抛出了自己定义的异常 myex,并在 catch 块中捕捉它。

  需要注意的是,在这个程序中,我们将异常参数的类型指定为 std::exception&,因为它是我们自定义异常(myex)的基类。这是因为在 C++ 中,派生类对象可以转换为其基类对象,但反过来就不行。因此,使用基类作为异常参数的类型,可以捕获任何派生类的异常。

  总之,异常处理是 C++ 中的一项重要功能,可以帮助程序处理不正常的情况,并减少程序出现异常时对用户造成的影响。如果您希望编写更健壮、更可靠的程序,那么异常处理是必不可少的技能。

#c++异常处理

相关文章

什么是软件架构?

什么是软件架构?

2023-10-15
什么是系统负载?

什么是系统负载?

2023-10-15
线程池是什么?

线程池是什么?

2023-10-15
谷歌将对Android广告跟踪进行更改意味着什么?

谷歌将对Android广告跟踪进行更改意味着什么?

2023-10-15

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取