选择题 34.  若有以下程序:
    #include<iostream>
    using namespace std;
    class Base
    {public:
      Base()
      {x=0;  }
      int x;};
    class Derived1:virtua1 public Base
    {public:
      Derived1()
    {x=10;}};
    class Derived2:virtuall public Base
    {public:
      Derived2()
      {x=20;}};
    class Derived: public Derivedl, protected Derived2{  };
    int main()
    {D erived obj;
      cout<<obj.x<<endl;
      return 0;}
    该程序运行后的输出结果是______。
【正确答案】 A
【答案解析】 本题考查虚基类的应用。虽然Derived1和Derived2都是由共同的基类x派生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本。这时数据成员x只存在一份副本,不论在类Derived1中修改,还是在Derived2中修改,都是直接对这唯一副本进行操作。本题程序执行语句“Derived obj;”时,就会先调用虚基类Base的构造函数,使得x=0,然后执行类Derived1的构造函数使得x=10,再执行类Derived2的构造函数,使得x=20。最后输出x的值为20。