1、C++的全局对象是在main函数被调用前初始化的。
2、当初始化一个对象时,遵循先父类构造函数,再子类成员,最后子类的初始化函数。
3、初始化列表的初始化顺序和列表顺序无关,只和类中的声明顺序有关。
几种情况必须在初始化列表中进行初始化
(1)类成员为const类型
(2)类成员为引用
(3)类成员没有默认构造函数的类的类型
所以,下面函数的初始化顺序为B-C-D-A-Main
#include "stdafx.h"
#include <iostream>
#include <string>
#include <stdlib.h>
class B
{
public:
B() {
std::cout << "inital of B class" << std::endl;
}
};
class C
{
public:
C(int i) {
std::cout << "inital of C class" << std::endl;
}
};
class D
{
public:
D(int i) {
std::cout << "inital of D class" << std::endl;
}
};
class A:public B
{
int i;
C objC;
D objD;
public:
A(int a):i(a),objD(a),objC(a) {
std::cout << "inital of A class" << std::endl;
}
};
A objA(2);
int main()
{
std::cout << "here is main" << std::endl;
return 0;
}