首页 / C++ / C++学习笔记之 异常
C++学习笔记之 异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++学习笔记之 异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2522字,纯文字阅读大概需要4分钟。
内容图文
异常
目录基本概念
异常处理就是处理程序中的错误
语法
#include <iostream>
using namespace std;
int myDivision(int a,int b) {
if (b == 0) {
// return -1;
// 抛出异常
throw -1;
} else if (b < 0) {
throw 3.14;
}
return a / b;
}
int main() {
try {
int ret = myDivision(10,-10);
ret = myDivision(10,0);
} catch (int a) {
cout << "捕获int异常" << a << endl;
} catch (...) {
cout << "捕获其他异常" << endl;
}
return 0;
}
捕获其他异常
捕获自定义异常
#include <iostream>
using namespace std;
class MyException
{
public:
void printERROR() {
cout << "我自己的异常" << endl;
}
};
int myDivision(int a,int b) {
if (b == 0) {
// return -1;
// 抛出异常
throw MyException();
}
return a / b;
}
int main() {
try {
int ret = myDivision(10,-10);
ret = myDivision(10,0);
} catch (MyException e) {
e.printERROR();
}
return 0;
}
我自己的异常
异常的接口声明
只允许函数在运行中抛出某种类型的异常
#include <iostream>
using namespace std;
class MyException
{
public:
void printERROR() {
cout << "我自己的异常" << endl;
}
};
// 只允许抛出int,MyException异常
int myDivision(int a,int b)throw(int,MyException) // C++14不允许,C++11不赞成
{
if (b == 0) {
// return -1;
// 抛出异常
throw MyException();
}
return a / b;
}
int main() {
try {
int ret = myDivision(10,-10);
ret = myDivision(10,0);
} catch (MyException e) {
e.printERROR();
}
return 0;
}
栈解旋
当发生异常时,从进入try块后,到异常被抛掷前,这期间在栈上的构造的所有对象都会被自动析构。析构的顺序与构造的顺序相反,这一过程被称为栈的解旋
异常变量的生命周期
// throw MyException(); MyException e 调用拷贝构造函数,创建新的异常对象
// throw MyException(); MyException& e 不调用拷贝构造,推荐使用
// throw &MyException(); MyException* e 对象被提前释放,如果操作e,非法操作
// throw new MyException(); MyException* e 要管理释放 delete e
异常的多态使用
父类:BaseException 虚函数:printERROR
演示
#include <iostream>
using namespace std;
class BaseException // 异常父类
{
public:
virtual void printERROR() {
;
}
};
class NULLPointerException : public BaseException // 空指针异常
{
public:
void printERROR() {
cout << "NULLPointerException" << endl;
}
};
void doTry() {
throw NULLPointerException();
}
int main() {
try {
doTry();
} catch (NULLPointerException &e) {
e.printERROR();
}
return 0;
}
NULLPointerException
标准异常
https://blog.csdn.net/weixin_42078760/article/details/80646206
#include <iostream>
#include <stdexcept>
using namespace std;
void doTry() {
throw out_of_range("数据越界");
}
int main() {
try {
doTry();
} catch (exception &e) {
cout << e.what() << endl;
}
return 0;
}
数据越界
内容总结
以上是互联网集市为您收集整理的C++学习笔记之 异常全部内容,希望文章能够帮你解决C++学习笔记之 异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。