C++程序有关问题,谁帮小弟我详细解释一下下面的C++程序的运行结果为什么是14302012 ?

C++程序问题,哪位高手帮我详细解释一下下面的C++程序的运行结果为什么是14302012 ??
#include <iostream>
using namespace std;
class Base 
{
  public:
Base(int i) { 
cout << i; 
}
~Base () { }
};

class Base1: virtual public Base 
{
  public:
Base1(int i, int j=0) : Base(j) 

cout << i; 
}
~Base1() {}
};

class Base2: virtual public Base 
{
  public:
Base2(int i, int j=0) : Base(j) 

cout << i; 
}
~Base2() {}
};

class Derived : public Base2, public Base1 
{
  public:
Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c), 
  Base2(d), Base(a) 

cout << b; 
}
  private:
Base2 mem2;
Base1 mem1;
};
void main() 

Derived objD (1, 2, 3, 4); 
}


------解决方案--------------------
1 //首先调用base的构造函数,所以输出1
4 //然后调用base2的构造函数,输出4
3 //然后调用base3的,输出3
0 //mem2(b)这个过程需要调用base2的构造函数,所以又需要先调用base的构造函数输出0
2
0 //同理
1
2