#include<iostream>
using namespace std;
class B1
{
public:
B1(int i)
{
cout<<"constructing B1 "<<i<<endl;
}
B1()
{
cout<<"destructing B1"<<endl;
}
};
class B2
{
public:
B2(int a)
{
cout<<"constructing B2 * "<<a<<endl;
}
B2( )
{
cout<<"constructing B2 *"<<endl;
}
};
class C:public B2, virtual public B1
{
B2 j;
public:
C(int a,int b,int c):B1(a),memberB1(b) ,j(c){}
C(){cout<<"sdghu"<<endl;}
private:
B1 memberB1;
B2 memberB2;
};
int main( )
{
C obj(1,2,3); //1
C abc; //2
}
程序无论怎样运行,如果创建A的对象总会首先调用其长辈的构造函数,调用其长辈的构造函数时,按照参数最佳匹配、虚函数首先调用其他函数依次调用的顺序来调用,即使在1处和2处没有任何表现形式,但是丝毫不影响按上述顺序依次调用该函数长辈的构造函数!!!
当然析构函数的调用就不用说了,直接全体向后转,齐步走来依次结束
网友评论