【c++】组合类+继承情况下构造顺序
组合类+继承情况下构造顺序
构造顺序同普通继承,先父后子,内部类是最老的(最先调用构造的)。
示例代码
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)
构造顺序(先父后子)