#include <iostream>
using namespace std;
class B1
{
public:
B1(int i){cout<<"coustructing B1 "<<i<<endl;}
~B1(){cout<<"destructing B1"<<endl;}
};
class B2
{
public:
B2(int j){cout<<"coustructing B2 "<<j<<endl;}
~B2(){cout<<"destructing B2"<<endl;}
};
class B3
{
public:
B3(){cout<<"coustructing B3 *"<<endl;}
~B3(){cout<<"destructing B3"<<endl;}
};
class C:public B2,public B1,public B3
{
public:
C(int a,int b, int c, int d):B1(a),memberB2(d),memberB1(c),B2(b){}
private:
B1 memberB1;
B2 memberB2;
B3 memberB3;
};
int main()
{
C obj(1,2,3,4);
return 0;
}
程序在执行时,首先执行派生类的构造函数,然后执行派生类的析构函数。构造函数部分我们已经讨论过了,派生类默认的析构函数又分别调用了成员对象及基类的析构函数,这次的次序刚好和构造函数执行时严格相反,看程序的运行结果如下: