-- 先基类, 再成员, 然后自己
class A {
public:
A() { cout << "in A()" << endl; }
};
class B {
public:
B() { cout << "in B()" << endl; }
B(int i) { cout << "in B(int i)" << endl; }
};
class C {
public:
C() { cout << "in C()" << endl; }
};
class CC: public C {
public:
CC():b(10) { cout << "in CC()" << endl; }
public:
A a;
B b;
};
int main ()
{
CC c;
return 0;
}
#CC t.C
#./a.out
in C()
in A()
in B(int i)
in CC()
-- 关于类成员的初始化有两种方式
1. 构造函数的实现中
2. 定义初始化成员列表
其顺势为
1. 分配内存,调用成员变量的构造函数隐式/显示的初始化各成员数据
2. 进入类构造函数后执行构造函数内部的代码
3. 类成员变量的初始化顺序以成员在类中的声明为序, 而不管它在初始化成员列表的出现顺势。(这是因为定义的顺序是固定的, 而不同的构造函数其初始化成员列表的顺序可能不一样, 变编译器没法提供统一的工作模式)
下列情况下成员必须在初始化列表中完成初始化
1. 调用基类的非缺省构造函数
2. const类型数据成员
3. 引用类型的数据成员