千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > c++中异常处理(trycatch)从入门到精通教程

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

来源:千锋教育
发布人:lxl
时间: 2023-06-05 11:05:00 1685934300

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

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT