c++学习7 2020-01-27

本文深入探讨析构函数的作用与调用时机,解释其在对象生命周期终结时的重要角色,同时解析this指针如何解决变量名冲突,以及常函数的使用规范与限制。

内容

1.“类中函数成员”之析构函数2.“类”之this指针“类中函数成员”之常函数

一.析构函数引

上一篇中已经讲过,构造函数是用来初始化一些变量的,其中也可能包括申请空间new,那么问题来了,何时delete这块空间呢?
没错,多数情况下,我们就用析构函数

二.析构函数

1.主要作用:对数据进行一下清理。

类比构造函数,就很好理解。

2.调用时间:在对象即将释放时调用。

类比构造函数,就很好理解。

3.使用形式

~ + 后面就跟构造函数大体相同
代码示例如下

class CStu
{
public:
    ~CStu()
    {
        cout << 21212 << endl;
    }
};

注意:析构函数只能有一个,而且没有参数

①局部对象

{
        CStu cstu;
}//就会在这里这个}之前执行析构函数。因为是局部变量,走完}就要释放。而析构函数是在它被释放之前调用的

②指针对象

CStu *cstu = new CStu;
       delete cstu;//就会在执行delete之前执行析构函数

③临时对象

这个之前没有学过。临时变量就是 类型+(),里面写上初始化的值。
比如

int a = int(4);

特殊的是:临时变量作用域就在这一条语句,语句结束就直接释放掉变量了
用的不多

类中构造临时变量是这样的

CStu();//有参数就传参数,没参数括号里面啥都不写

这一条语句执行过程中既有构造函数的调用也有析构函数的调用。

4.new和delete在类中的特殊性

new会触发构造函数,而malloc不会
delete会触发析构函数,而free不会

三.this指针引

当作用域较大的局部变量和作用域较小的局部变量名字冲突时,如何区分这两个呢?
没错!就是this指针

四.this指针

1.介绍

this指针是在创建对象之后才有的,不是成员,而是类内函数成员的隐含参数,所以只能在函数成员内使用,在类的其他地方不行。
this指针的类型是对应类的指针类型

2.使用

使用形式如下

class CStu
{
public:
    int a;
    CStu(int a)
    {
        this->a = a;//这里a和a重名,所以可以用this指针来区分。如果不加,那么这一条语句的两个a都是参数,是较小作用域的a。
    }
};
int main()
{
    
    CStu cstu(10);
    cout << cstu.a << endl;


    system("pause");
    return 0;
}

五.常函数

1.作用:

对函数的功能有更明确的限定。比如一个show函数,只是用来显示数,那么它就不会改变数据成员的值,那就可以把show函数变成常函数。

2.使用形式

就是在类内函数()后面加个const
代码示例如下:

void show() const
    {
        cout << a << endl;
    }

3.注意事项

①构造函数和析构函数不能是常函数
②常函数可以使用类中的数据成员,但是不能修改。但是常函数里面声明的变量可以修改,即内部变量可以修改
③常函数里面this指针变成了 const CStu✳

复习常量指针和指针常量
常量指针,可以理解为指向常量的指针。即不能改变指向的数据的值,但是可以改变指向

指针常量,可以理解为是一个指针的常量,它的值不能变,可是它指向的对象是可变的,因为我们并没有限制它指向的对象是常量。

④常对象只能调用常函数,不能调用普通函数
常对象就是在对象声明的前面加个const,和const int a = 1;类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值