选择题 2.  有如下程序:
    #include<iostream>
    using naraespace std;
    class Base1{
    public:
    Base1(int d){cout<<d;}
    ~Base1()  {}
    };
    class Base2{
    public:
    Base2(int d){cout<<d;}
    ~Base2()  {}
    };
    class Derived:public Base1, Base2{
    public:
    Derived(int a, int b, int c, int d):Base1(b), Base2(a), b1(d), b2(c){}
    private:
    int b1;
    int b2;
    };
    int main()
    {
    Derived d(1, 2, 3, 4);
    retuen 0;
    }
    运行时的输出结果是______。
【正确答案】 D
【答案解析】 该题考查的内容是派生类的构造函数。派生类对基类成员访问权限。考生应该注意成员初始化列表中基类名和成员对象名的排列顺序是任意的,但派生类中构造函数的执行遵循以下顺序:
   (1)调用基类的构造函数。在多继承派生中,基类构造函数调用的顺序按照定义派生类时基类声明的顺序进行,而与派生类构造函数的成员初始化列表给出的顺序无关;
   (2)调用成员对象的构造函数。当派生类中有多个成员对象时,各个成员对象构造函数的调用顺序按照各个成员对象在派生类中声明的顺序,而与在派生类构造函数的成员初始化列表中给出的顺序无关。故答案为D。