C++的异常捕获
听课笔记:

#define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; void fun() { throw 1;//抛出整型异常值 } void fun02() { throw "hello!";//抛出const char* 类型的字符串 } class MyException { public: MyException(const char* str) { cout << "构造函数被调用!" << endl; error = new char[strlen(str) + 1]; strcpy(error, str); } MyException(const MyException& ex) { cout << "拷贝构造函数被调用!" << endl; error = new char[strlen(ex.error) + 1]; strcpy(error, ex.error); } MyException operator=(const MyException& ex) { cout << "拷贝赋值函数被调用!" << endl; if (error == ex.error) { return *this; } delete error; error = new char[strlen(ex.error) + 1]; strcpy(error,ex.error); error = new char[strlen(ex.error) + 1]; strcpy(error, ex.error); return *this; } void what() { cout << "捕获异常: " <<error<< endl; } ~MyException() { cout << "析构函数被调用!" << endl; if (error!=NULL) { delete[] error; } } private: char* error; }; void fun03() { //创建一个临时对象,有的老师叫做匿名对象,这将要调用普通构造函数 throw MyException("wrong!");//既然可以抛内建数据类型的变量(对象),那也可以抛自定义类型的对象 } void test01() { try { fun(); } catch (int e)//接收整型异常值,接收数据类型和抛出数据类型要匹配 { cout << "捕获异常: " <<e<< endl;//打印catch到的异常值 } try //try中放进去你认为可能出错的代码 { fun02(); } catch (const char* str1)//捕获异常,参数类型和抛出的数据类型要一致 { cout << "捕获异常: " << str1 << endl; } try { fun03(); } catch (MyException e)//抛出的是个自定义对象,捕获的参数类型也要是一个同类型的对象 {//接收抛出的对象相当于做对象拷贝,这要调用拷贝构造函数 e.what(); } } int main() { test01(); system("pause"); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理