C++ 初始化列表、对象创建/销毁过程、this指针
初始化列表
初始化列表是构造函数的一种特殊语法,只能在构造函数中使用,它的主要用处是给类的成员变量进行初始化。
class 类名
{
成员变量;
public:
类名(形参列表):成员变量名(初始化数据) , ...
{
}
}
1、可以区别同名的参数和成员变量,使用同名参数给成员变量初始化。
2、是唯一正常初始化const属性成员变量的方法。
3、可以调用成员类、父类的有参构造。
对象的创建和销毁过程
对象的创建过程:
1、给对象分配它所需要的内存(堆,栈)
Test* t = new Test; // 堆
Test t; // 栈
2、执行初始化列表
a、按照继承表的顺序,执行父类的构造函数,与初始化列表无关。
b、按照成员的定义顺序,执行成员的构造函数,与初始化列表无关。
c、初始化成员变量
3、执行构造函数,分配、申请资源、完成准备工作
对象的销毁过程:
1、执行对象的析构函数,释放资源、保存数据。
2、按照成员的定义顺序,逆序执行成员的析构造函数。
3、按照继承表的顺序,逆序执行父类的析构函数。
4、销毁对象的内存。
this指针
成员函数是如何区别调用它的对象?
1、对象所占用内存中没人存储成员函数指针,只存储了它的成员变量。
2、成员函数有个隐藏的参数叫this,就是该类型的指针,当在成员函数中访问成员变量时,隐藏的加了this指针。
常对象与常函数:
1、被 const 修饰过的对象,不能调用普通的成员函数,因为 const 对象获取到的this指针同样具有const属性,而普通的成员函数的this不具备const属性,所以无法调用。
2、成员函数的格式末尾添加 const 该成员函数的this指针就具备了 const 属性,这种成员函数也叫作常函数。
返回值 函数名(参数列表) const
{
}
普通对象和常对象都可以调用常函数,但常对象只能调用常函数。
普通成员函数和常函数都可以调用常函数,但常函数只能调用常函数。
常函数与普通成员函数(格式一模一样),可以形成重载。