#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處沒有任何表現形式,但是絲毫不影響按上述順序依次調用該函數長輩的構造函數!!!
當然析構函數的調用就不用說了,直接全體向后轉,齊步走來依次結束