c++的虚函数与继承问题

 代码如下:

#include <iostream>
using namespace std;
class base1{
	public:
		base1() {
			cout<<"class base1"<<endl;
		}
};
class base2{
	public:
		base2() {
			cout<<"class base2"<<endl;
		}
};
class level1:public base2,virtual public base1{
	public:
		level1() {
			cout<<"class level1"<<endl;
		}
}; 
class level2:public base2,virtual public base1{
	public:
		level2() {
			cout<<"class level2"<<endl;
		}
}; 
class toplevel:public level1,virtual public level2{
	public:
		toplevel() {
			cout<<"class toplevel"<<endl;
		}
}; 
int main () {
	toplevel obj;
	return 0;
}

请各位大佬帮我分析下这个结果

实在有点让我难以理解

构造都是先构造基类,再构造子类,所以可以反过来看顺序更好理解

另外,由于涉及多重继承,使用了virtual继承,所以被重复继承的base1基类,只会进行一次构造