上图是类的6个默认成员函数。今天我们主要梳理的是构造函数和析构函数知识。
构造函数
构造函数相当于我们在写一些数据结构的初始化,例如StackInit()函数。起到对数据的初始化。
构造函数的语法
1.函数名和类名相同
2.没有返回值(这里的没有返回值指的不是viod而是不写)
3.对象实例化是自动调用对应的构造函数。
4.构造函数可以重载。
注:无参的构造函数不能加括号,原因是:无法区分函数声明。
构造函数的特性
1.默认构造函数包括三种:无参数构造函数、全缺省构造函数(最推荐使用的)和编译器自动生成的构造函数。
2.编译器默认生成的构造函数,对内置类型(int/char/double…)不做处理,对自定义类型(class/struct)会去调用它的默认构造函数。(自定义类型的尽头也是内置类型,且如果自定义类型没自己写的默认构造函数,会调用编译器生成的构造函数,也不处理。)
3.c++11,可以在声明位置给缺省值。
4.全缺省构造函数和无参构造参数不能同时存在。
5.编译器默认生成的构造函数也会被调用,但是什么都不做。
析构函数
析构函数相当于我们写的销毁函数,例如:StackDestory();析构函数并不会销毁对象本身,而是清理资源,如free(),fclose()。
析构函数的语法
1.析构函数名是在类名前加‘~’。
2.无参数和返回值类型。
3.一个类只能有一个析构函数,若未定义系统自动生成,且生成也什么都不做。(析构函数不可重载)。
4.对象生命周期结束时,出++编译系统自动调用,如果全局/静态变量会在main结束时调用。
析构函数的特征
1.析构函数要自己写,因为自动生成的什么都不处理。
2.析构函数不是对对象的本身销毁,而是清理资源。
3.析构函数销毁的顺序:先局部→在局部的静态变量→全局/全局的静态变量。(后定义的先析构)