作者:DaybreakCP | 来源:互联网 | 2023-10-12 12:53
【this指针】
正常情况下,在类中函数编写的时候就会出现一个非常尴尬的问题就是,我们参数名和类中名字是相同的,这个时候就会出现一个特别尴尬的问题,就是我们傻傻分不清这个这个成员是这个本身类中的还是参数类中的,这个时候C++中通过引入this指针在解决这个问题
即:C++编译器给每个“非静态的成员函数增加了一个隐藏的指针参数this,让该指针指向当面对象(函数运行时调用该函数的对象),在函数体中所有的“”成员变量”的操作,都是通过该指针去访问。只不过所有的用户都是透明的,既不需要来传递,编译器自动完成。
也就是:this指针这玩意是编译器自动生成的,不需要你手动生成了,你也这可以理解为这个this就是这个类本身。
【this指针的特性】
1.this指针的类型:类类型* const,即成员函数中,不能给this指针赋值。
2.只能在“成员函数内部使用”
3.this指针本质上是“成员函数”的形参,当对象调用成员函时,将对象地址作为实参传递给this形参,所以对象中不存储this指针,所以在类的成员中你找不到这玩意。
4.this指针是“成员函数”第一个隐含的指针形参,一般情况下由编译器通过ecx寄存器自动传递,不需要用户传递。
【类的6个默认成员函数】
如果一个类总什么成员都没有,简称空类
空类中真的什么都没有吗?并不是,任何类在什么都不写的时,编译器会自动生成以下六个默认成员函数。
默认成员函数:用户没有显示显现,编译器会生成的成员函数称为默认成员函数。
【构造函数】
特性:构造函数是特殊的成员函数,需要注意的是,构造函数虽然名字叫构造,但是构造函数的主要任务并不是开空间创建对象,而是初始化对象。
其特征如下:
1.函数名和类名相同
2.无返回值
3.对象实例化时编译器自动调用对应的构造函数
4.构造函数可以重载
tips:如果类中没有显示定义构造函数,则编译器会自动生成一个无参的默认构造函数,一旦用户显示定义,编译器将不在生成。
这个时候聪明的小朋友就要问了,为啥我有了编译器自带的构造构造函数,但是我初始化一个类最后的结果依旧是一个随机值?也就是说默认构造函数并没有用?
C++把类型分为内置类型和自定义类型,内置类型就是语言提供的数据类型,如:int,char....,自定义类型就是我们使用class/struct/union等自己定义的类型,而C++中编译器自己生成的构造函数对内置类型不做处理,但是对自定义类型调用自定义类型本身的构造函数。
注意:可能写出C++的大佬认为这个构造函数不对内置类型做出处理属实有点反人类,于是在C++11中对内置类型成员不初始化的缺陷,又打了补丁,即:内置类型成员变量在类中声明时可以给出默认值。置于为何是又,这个倒构造函数的细解就知道了。
默认构造函数的类型:
无参的构造函数和全缺省的构造函数都被称为默认构造函数,并且默认构造函数只能有一个!!!
注意:无参构造函数,全缺省构造函数,我们没写编译器默认生成的构造函数,都可以认为是默认构造函数。
【析构函数】
概念:构造函数告诉我们一个对象是咋来的,那么析构函数函数就是告诉我们一个对象时咋没的
析构函数不是完成对对象本身的销毁,局部对象销毁工作是由编译器完成的,而对象在销毁时会自动调用析构函数,完成对象资源中的清理工作。
特性:
1.析构函数名是在类名前面加上字符“~”。
2.无参数无返回类型
3.一个类只有一个析构函数,若未显示定义,系统会自动生成默认的析构函数,注意:析构函数不能重载。
4.对象声明周期结束时,C++编译系统自动调用析构函数
5.和构造函数相反,析构函数默认只能将内置类型给重新归零,但是对申请的内存资源不做处理,对自定义类型则会调用自定义类型自己的析构函数。
tips:当类的成员没有向系统申请资源的时候,默认的析构函数就已经够用了,但如果内部成员调用了系统资源,就要你自己去手动编写这个析构函数了。