组合类+继承情况下构造顺序
构造顺序同普通继承,先父后子,内部类是最老的(最先调用构造的)。
示例代码
class A
{
public:
A(int a = 0)
:_a(a)
{
cout << "A()" << endl;
}
~A()
{
cout << "~A()" << endl;
}
protected:
int _a;
};
class AA
{
public:
AA(int a = 0, int aa = 0)
:_a(A(a))
,_aa(aa)
{}
protected:
A _a;
int _aa;
};
class B:public AA
{
public:
B(int b = 0, int a = 0,int aa = 0)
:AA(a,aa)
,_b(b)
{}
protected:
int _b;
};
int main()
{
B b(1,2,3);
return 0;
}
示例代码中AA中有内部类A,B继承了AA。在显示调用父类构造函数时与普通继承没有任何区别,只是初始化的成员累成变化成了哪个内部类需要的类型。
但是可以清晰地看出,类B中并不存在类A,只有类AA。(因为A是类AA的成员,只不过这个成员是一个类,所以有了AA就相当于有了A)
构造顺序(先父后子)