c++多态:一个继承两个父类的子类构造函数调用的过程的顺序是怎么样的,下面为什么是这个调用顺序

#include<iostream>

using namespace std;

class A{
public:
A(){
cout<<"A"<<endl;
}
A(int i){
cout<<"A&"<<i<<endl;
}
~A(){
cout<<"~A"<<endl;
}

};
class B{
public:
B(){
cout<<"B"<<endl;
}
B(int i){
cout<<"B&"<<i<<endl;
}
~B(){
cout<<"~B"<<endl;
}
};
class C:public A, public B
{
public:
C(int a, int b, int c):A1(a),B(b){/*在A1(a)是A(a)时输出是:A&1,B&1,A,B,A&3,C&3,换成A1(a)后输出是:A,B&2,A&1,B,A&3,C&3*/
A2 = new A(c);
cout<<"C&"<<c<<endl;
}
~C(){
delete A2;
cout<<"~C"<<endl;
}
private:
A A1;
B B1;
A *A2;
int t;
};

int main(){
C(1,2,3);
return 0;
}

先构造父类,再构造子类。

所以先构造父类A B
再构子类成员A1 B1
再调用C的构造函数构造A2追问

这是常规的顺序,我比较好奇的是将A(a)改成A1(a)之后的构造顺序,为什么输出会变成A,B&2,A&1,B,A&3,C&3,即A的无参构造和一个参数的构造函数掉了个个,而不是直接将无参构造的A1插入到最前面

追答

第一个还是父类A啊
你没给父类的构造函数参数当然就是磨人的无参数的了
给A1有参数了当然后面就是有参数的了

说了先构造父类的 不管有没有参数都在最前面构造啊

前两个一直是父类A和B的构造

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答