虚基类,该如何处理

虚基类
//如果一个派生类中有一个直接或间接的虚基类,那么派生类的构造函数
//的成员初始化列表必须列出对虚基类构造函数的调用。如果没有列出,
//则使用该虚基类的默认构造函数来初始化派生类对象的虚基类对象。

//这个是我总结的两句话:(假如各个派生类都有参数)
//A:就是如果一个派生类存在间接虚基类的话,虚基类中的构造函数应该是
//在派生类中显示列出来,而被调用。

//B:但是如果派生类中没有虚基类的话,应该是这个基类的直接派生类调用这个
//基类的构造函数,而不是这个基类的间接派生类去调用基类的构造函数。


//对于第二句话(其实这里写个类a继承类b,类b继承类c理解起来可能更好。
//看这个程序://基类child并没有调用base基类中的函数(呵呵调用了构造函数哦)
                                        //所以没有二异性只不过child1和child2应该还是都拷贝了类base的成员
                            //如果对于上面这个不清楚去看看二异性是什么?
#include <iostream>
using   namespace   std;
class   base  
{
public:
            base(int   i):a(i)
            {
                        cout < < "base= " < <i < <endl;

            }
            void   print()
            {
            }
private:
            int   a;
};

class   child1   :   public   base  
{
public:
            child1(int   i):base(i)
            {
                        cout < < "child1= " < <i < <endl;

            }
private:
            int   b;
};

class   child2:     public   base
{
public:
            child2(int   i):base(i)
            {
                        cout < < "child2= " < <i < <endl;

            }
private:
            int   c;
};

class   child:public   child1,public   child2
{
public:
            child(int   a,int   b):child1(a),child2(b)//,base(a)
            {
                        cout < < "child= " < <a < <endl;
                        cout < < "child= " < <b < <endl;

            }
private:
};

int   main()
{
            //child2   obj(2);
            child   obj(1,2);
           
            return   0;
}


//对于A:看这个
#include <iostream>
using   namespace   std;

class   base  
{
public:
            base(int   i):a(i)
            {
                        cout < < "base= " < <i < <endl;