学习C++、QT---11(C++析构函数、static静态变量的讲解)

每日一言

        生活不是等待风暴过去,而是学会在雨中起舞。

析构函数

首先讲写法,1、析构函数是在类里面构建的,我们只需要 ~ 加上类名  然后()[ ]

和我们的构造函数很像,但是构造函数有参数,这个析构函数不能有任何的参数

析构函数的作用,以及是怎么用的,析构函数主要用于后期我们对于大型项目的资源的管理会更加的规范合理,在代码中我们只有当一个局部对象的作用域结束的时候我们的,析构函数才会运行,然后或者是我们的动态分配的对象被delete后析构函数才会被运行,就比如我们的代码片段

有没有发现我们的析构函数被调用了两次,是为什么?

  1. 我们的第一个普通对象p1的所在的作用域结束后调用一次,作用域是什么意思?也就是main函数的{  }代表一个作用域,代码运行过了最后一个}的时候就会调用析构函数了
  2. 还有一个就是我们不是创建了一个指针对象嘛,那么我们现在要知道我们创建指针对象需要开辟空间,那么我们使用完后需要自己给释放空间,所以当我们释放结束的时候这个析构函数也会被调用一次,
  3. 那么为什么我们说析构函数用于管理资源会比较好呢,因为看我们这边,我不是创建了一个的指针类型的data吗,我给他赋予了包含10个int类型元素的一个数组吗,然后我们这个也是需要开辟内存的,和释放内存的,如果我们将释放内存都放到main函数里面去做,那也能会忘记,也会增加main函数的代码数量,那么我们就要将释放的操作放在析构函数里面,这样比较的清晰明了,更易于维护

static关键字静态变量

在这个案例中,我们定义了一个静态的变量,就是static作为前缀,类型前面加个static那么就是静态变量,

我们要记住在 C++ 中,静态成员变量的声明和定义是分开的

  • 声明(带 static)必须放在类内部;
  • 定义(不带 static)必须放在类外部。

我们发现静态变量需要声明写在类中,实现赋初识值需要在外部

那么我们会发现静态变量的引用方式和我们的普通变量不一样,静态变量是直接可以用类: :静态变量名,这样来引用的,那么就是说,我们的静态变量可以直接通过类来调用,有点像我们之前的函数隶属于类的感觉,当然也可以用对象进行调用

我们看到p1这个对象,我们尝试对静态变量进行赋值,我们发现可以赋值,也就是说:

可以通过对象来给静态变量赋值,语法上和普通成员变量赋值类似,但实际影响的是类共享的静态变量。

什么是共享??看我们的

P1这个对象不是进行将我们的静态变量进行赋值了吗  由静态变量的初值为0给他改为了900,然后我们又创建了一个p2对象,看一下p2对象的静态变量的输出值是多少,输出值依旧是900.,所以我们说静态变量不属于任何对象,属于这个类,但是不耽误我们的对象可以对他进行改值,静态变量的共享性,就是我们改的是类中的静态变量的值,所有对象的这个静态变量都是一样的值,这个就叫做共享,那么我们可以依据这个特性我们可以来编写个程序,来看我们创建了多少个对象

还有一点就是我们的普通变量是不能用类的方式来调用普通变量的,因为我们的普通变量是只能是类的创建的对象才能进行调用的

接下来我们看这个案例

多么的清晰啊,我们创建了三个对象,那么就显示3,这个也是利用了静态变量的共享实现的,别看我什么都没写,那是因为我把代码写到了构造函数里,构造函数在对象创建完的时候就会调用,那么我在构造函数里面没回让这个静态变量a每次+1,因为这个a是属于类的,不会根据对象的改变而重新赋值为0,而是会永远改变a的值,下一个对象的静态变量也是用的这个类中的静态变量,所以没回都加一,就实现了,我创建一个对象就+1的效果了

那么这个的话我们是用了函数的打印和自己对象的调用来看我们的静态变量 的变化,还有析构函数的作用我们让他自减,所以实现的这个效果

我们会看到在main函数的中间我自己加了两个{ }表示作用域,因为我们的析构函数的其中一个触发调用的条件就是离开作用域后会调用析构函数,

那么我们这边

这个p2和p3一旦代码执行离开此作用域后就会调用构析函数,而且会调用两次,一次是p2对象,一次是p3对象,那么我们的3就会减2 等于1,所以我们最后输出cout << num::a<< endl;等于1

这个就是静态变量的特性,和写法了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱嵌入式的涛涛同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值