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

被折叠的 条评论
为什么被折叠?



