程序代码:
#include <iostream>
using namespace std;
class A
{
public:
A(char *s)
{
cout<<s<<endl;
}
};
class B:public A
{
public:
B(char *s1, char *s2):A(s1)
{
cout<<s2<<endl;
}
};
class C:public A
{
public:
C(char *s1,char *s2):A(s1)
{
cout<<s2<<endl;
}
};
class D:public B, C
{
public:
D(char *s1,char *s2,char *s3,char *s4):B(s1,s2),C(s3,s4)
{
cout<<s4<<endl;
}
};
int main()
{
D d("class A","class B","class C","class D");
return 0;
}
预计结果:
classA
classB
classC
classD
classD
运行结果:
结果分析:
开始直接调用的是BC的派生类,在构造函数时会分别调用BC的构造函数,而BC又分别是A的派生类,调用BC时会调用A,于是会在BC调用A的构造函数时输出classA和classC,