#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(a)改成A1(a)之后的构造顺序,为什么输出会变成A,B&2,A&1,B,A&3,C&3,即A的无参构造和一个参数的构造函数掉了个个,而不是直接将无参构造的A1插入到最前面
追答第一个还是父类A啊
你没给父类的构造函数参数当然就是磨人的无参数的了
给A1有参数了当然后面就是有参数的了
说了先构造父类的 不管有没有参数都在最前面构造啊
前两个一直是父类A和B的构造