C++初始化顺序相关
C++初始化顺序相关
1. 设置函数默认参数的顺序: 从右到左
原因: 调用函数时填写参数的顺序是从左到右,因此默认参数必须从右到左给
2. 类的数据成员初始化列表初始化顺序为: 从右到左
例子:
class ClassA
{
public:
ClassA():m_n2(0), m_n1(m_n2+2)
{}
void Print()
{
cout<<"m_n1: "<< m_n1 << " m_n2: "<< m_n2 <<endl;
}
~ClassA()
{}
private:
int m_n1;
int m_n2;
};
int _tmain(int argc, _TCHAR* argv[])
{
ClassA obj;
obj.Print();
return 0;
}
输出结果: m_n1: 0xccccccce m_n2:0 (m_n2初始值为0xcccccccc)
3. 类的数据成员与构造函数的初始化顺序: 先初始化类的数据成员,再调用构造函数
原因: 调用构造函数的时候,构造函数可能需要访问数据成员,因此需要数据成员提前初始化好。
4. 类的数据成员与析构函数的销毁顺序: 先调用析构函数,再销毁类的数据成员
原因: 调用析构函数时,析构函数可能需要访问数据成员,因此需要数据成员稍后析构。
5. 构造函数的调用顺序(按照某大姐的说法:先有爷爷,再有父亲,再有儿子):
a. 基类构造函数 b. 子对象构造函数 c. 派生类构造函数
6. 析构函数的调用顺序:
a. 派生类的析构函数 b. 子对象的析构函数 c. 基类的析构函数
未完


浙公网安备 33010602011771号