目录
5 函数只抛出,不处理。让上层函数处理,并且上层函数还可以不处理,让上上层函数处理,以此类推。
可以让程序在即将发生异常前被处理,不会让程序因为发生异常而终止。
处理执行try块的代码,如果执行throw 数据, 则try中余下的代码都不执行,进行进入catch中执行,而catch中参数会收到throw 执行出的数据。catch执行结束后,程序从catch后面的代码继续执行
抛出的该数据可以是基础类型,也可是对象.
示例1: 抛出int型数据

示例2:抛出字符串

示例3:抛出对象
该示例是一个不规范的示例,此处给出,只为讲清楚异常的机制

异常类使用时, 导入,并且异常类的名称空间为std
示例1:抛出exception异常

示例2:抛出invalid_argument异常
该异常对象构造函数还字符串参数。

一般继承exception来实现,理论上也可以通过继承exception的子类来实现

示例1:

在函数后面指定能抛出的异常数据类型
指定抛出的是类时,实计抛出的可以是指定类和派生类的对象
如果函数抛出throw()则表示不能抛出异常,该方式现在已经建议使用(11版本开始) const noexcept代替,就像前面使用const char* what() const noexcept , 表示不能抛出异常。

1 概念:
转换函数的实质就是运算符重载,只是重载的运算符不是内置的运算符而是类名这个特殊的自定义类型。
2 自定义转换函数
(1)语法形式:
operator 类型名( )
{
实现转换的语句
}
(2)转换函数的基本规则:
转换函数只能是成员函数,无返回值,空参数。
不能定义到void的转换,也不允许转换成数组或者函数类型。
转换常定义为const形式,原因是它并不改变数据成员的值。
explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换
(3)示例:
- //源文件,测试文件
- #include
- using namespace std;
- class Integer {
- private:
- int val;
- public:
- Integer(int i=0) {
- cout<<"Integer(int i)"<
- this->val = i;
- }
- //转换函数
- operator int() const {
- cout<<"int()"<
- return val;
- }
- void setVal(int val) {
- this->val = val;
- }
- int getVal() {
- return val;
- }
- };
- int main() {
- Integer i;// 触发 Integer(int u)
- i.setVal(100);
- int x = i;//等效书写 int x = (int)i; 触发int()。
- cout<
//100 - Integer y = 200;// 触发Integer(int i)
- cout<
// 触发int() 200 - return 0;
-
- }
3 标准转换函数

智能指针:
只针对堆中对象。 类名 p=new 类名。
1、unique_ptr:
只允许一个指针指向对象,指针不指向堆中对象时,堆中对象被销毁。

2、shared_ptr
三、智能指针
在C++11中有四种智能指针,auto_ptr,shared-ptr,unique_ptr和weak-ptr。其中auto_ptr有和多不足之处,在C++11中已经建议废弃使用。都是在memory头文件中声明的。名称空间为std
1 unique_ptr,
当变量销毁或变量的值置NULL后,指向的对象会销毁,该对象还只能一个指针指向它。
该指针的操作
(1) p->访问对象中的成员
(2) p = NULL;
(3) p.reset();//等效于 p = NULL
(4) p.reset(new Demo); p指向新的堆中的对象, 不再指向之前的内容
示例: unique_ptr

2 shared_ptr
在给shared_ptr分配内存时建议使用make_shared函数,这样最安全。make_shared会分配一个临时对象,而临时对象又会自动销毁,所以会有两次析构函数的执行。
p1.reset()会使用p1不再指向对象。等效于p1=NULL
p1.reset(new Demo),该指针指向新的对象了。
3 weak_ptr
可以保存一个“弱引用”,引用一个已经用shared_ptr管理的对象。
weak_ptr可通过shared_ptr来初始化
weak_ptr.expired()判断对象是否销毁,如果有返回0,没有返回1
weak_ptr.lock()返回shared_ptr, 如果没有返回NULL


-
相关阅读:
java 泛型静态方法入参泛型类 和 RestTemplate 泛型返回
计算机毕业设计Java校园墙系统(系统+源码+mysql数据库+lw文档)
观测云产品更新 | 数据转发、监控器告警策略等优化
【专精特新周报】专精特新“小巨人”科润智控上市;北交所首例!生物谷及责任人被纪律处分;北交所4家企业发布半年度业绩预告...
测试员突破瓶颈指南,不看又废了一年
C#选择排序(Selection Sort)算法
基础 | 并发编程 - [Callable & FutureTask]
java专项练习(评分)
qt对于一个QWidget的所有事件
代码随想录算法训练营第五十七天 | 动态规划 part 15 | 392.判断子序列、115.不同的子序列
-
原文地址:https://blog.csdn.net/qq_52119661/article/details/133315891